Yes you can do it using SharePoint OM. I have done it before. I don't if this will help but here is part of my code.
private void FillInSiteColumns()
{
bool created = true;
SPWeb siteDirectoryArea = null;
string site = SiteURLBox.Text.Substring(0, SiteURLBox.Text.LastIndexOf('/')-1);
SPList siteDirectoryList;
SPSite portalSite = new SPSite(site);
siteDirectoryArea = portalSite.AllWebs["SiteDirectory"];
siteDirectoryArea.AllowUnsafeUpdates = true;
siteDirectoryList = siteDirectoryArea.Lists["Sites"];
SPListItemCollection listItems = siteDirectoryList.Items;
foreach(SPListItem item in listItems)
{
if (item["SiteTitle"].Equals(SiteTitleBox.Text))
{
created = false;
break;
}
}
if (created == true)
{
SPListItem itm = listItems.Add();
itm = siteDirectoryList.Items.Add();
itm["SiteTitle"] = SiteTitleBox.Text;
itm["SiteURL"] = SiteURLBox.Text;
itm["Col 1"] = FillInColVal(one);
itm["Col 2"] = FillInColVal(two);
itm["Col 3"] = FillInColVal(three);
itm["Col 4"] = FillInColVal(four);
itm.Update();
}
}