For software, I have an Automation Policy that runs daily and sends a report to me of any software installed over the past day. It pulls the data from the add remove programs data. I went into the Automation Policies and created a new policy, and used RAW SQL as the data source. This is the SQL I have used.
SELECT InvHist_AddRemoveProgram.DisplayName as [Product Name],
InvHist_AddRemoveProgram.DisplayVersion as 'Product Version',
vComputer.Name AS [Computer Name],
vComputer.[IP Address],
vComputer.Domain,
case when InstallFlag = 1 then 'Installed' else 'Uninstalled' end as Activity,
InventoryDate as [Inventory Date]
FROM InvHist_AddRemoveProgram INNER JOIN vComputer ON InvHist_AddRemoveProgram._ResourceGuid = vComputer.Guid
WHERE (InvHist_AddRemoveProgram.DisplayName LIKE '%') and (InstallDate between getdate()-1 and getdate())
It works pretty well. I am not an SQL person and I have just recenlty pushed Altiris so there might be a better/easier/more complete way of doing this, but it's a start.