Here is another option.
Set up a giant webhook to create child records in an Audit log table where the field are the field name and the old and the new values.
The body of the webhook would look like this
<qdbapi>
<usertoken>bxv4tx_bjix_8csgf2bk9smkgc5igppzvgv53r</usertoken>
<records_csv>
%RepeatOn%
"[Last Modified By]","Client Name","[old.Client Name]", "[Client Name]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Site Name","[old.Site Name]", "[Site Name]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Contact Name","[old.Contact Name]", "[Contact Name]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Contract Name","[old.Contract Name]", "[Contract Name]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Contract Type","[old.Contract Type]", "[Contract Type]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Industry","[old.Industry]", "[Industry]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Primary Project Manager","[old.Primary Project Manager]", "[Primary Project Manager]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Secondary Project Manager","[old.Secondary Project Manager]", "[Secondary Project Manager]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Large Contract Approver","[old.Large Contract Approver]", "[Large Contract Approver]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Estimator","[old.Senior Estimator]", "[Senior Estimator]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Projected Start Date","[old.Projected Start Date (not in use)]", "[Projected Start Date (not in use)]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Projected End Date","[old.Projected End Date (not in use)]", "[Projected End Date (not in use)]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Contact Status","[old.Contract Status]", "[Contract Status]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Award Date","[old.Award Date]", "[Award Date]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Customer PO","[old.Customer PO]", "[Customer PO]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Required Estimate Submission Date","[old.Required Estimate Submission Date]", "[Required Estimate Submission Date]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Revised Estimate Submission Date","[old.Revised Estimate Submission Date]", "[Revised Estimate Submission Date]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Driving Requirements","[old.Driving Requirements]", "[Driving Requirements]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","One Way Miles to Site","[old.One Way Miles to Site]", "[One Way Miles to Site]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","General Contract Notes","[old.General Contract Notes]", "[General Contract Notes]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Specific Location(s) of Work at Client Site","[old.Specific Location(s) of Work at Client Site]", "[Specific Location(s) of Work at Client Site]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Purpose of Work being Performed","[old.Purpose of Work being Performed]", "[Purpose of Work being Performed]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Explanation for change to Required Submission Date","[old.Explanation for change to Required Submission Date]", "[Explanation for change to Required Submission Date]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Specific Location(s) of Work at Client Site","[old.Specific Location(s) of Work at Client Site]", "[Specific Location(s) of Work at Client Site]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Region","[old.Region]", "[Region]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","CCI Breakdown Req'd","[old.CCI Breakdown Req'd]", "[CCI Breakdown Req'd]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Vista Import #","[old.Vista Import #]", "[Vista Import #]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Required Estimate Submission Time","[old.Required Estimate Submission Time]", "[Required Estimate Submission Time]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Special Payment Requirements (if applicable)","[old.Special Payment Requirements (used on EF+ Forms)]", "[Special Payment Requirements (used on EF+ Forms)]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Actual Submission Date","[old.Actual Submission Date]", "[Actual Submission Date]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Respectfully, (EF+ From) (userid)","[old.Respectfully, (EF+ From) (userid)]", "[Respectfully, (EF+ From) (userid)]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Date Sent to Customer Frozen by Webhook or URL button on Change Order","[old.Date Locked by Awarded or Final PDF Created]", "[Date Locked by Awarded or Final PDF Created]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Mark as Not Awarded","[old.Mark as Not Awarded]", "[Mark as Not Awarded]", "CO","[Record ID#]","[Record ID#]"
"[Last Modified By]","Folder Setup?","[old.Folder Setup?]", "[Folder Setup?]", "CO","[Record ID#]","[Record ID#]"
%RepeatOff%
</records_csv>
<clist>6.7.8.9.10.11.14</clist>
</qdbapi>
That would fire on any edit.
Then of course 99% of the field will not have changed, so the ones where old and new value match are filtered off reports and then using an Automation (which can delete up to 1,000 records) are deleted each day. If there are likely to be > 1,000 records created each day then either you can can push a button to delete manually or else break up the deletion into smaller filters based on say the last digit of the Record ID to delete say 1/10th of the records per Automation and copy the Automation 10 times.
------------------------------
Mark Shnier (YQC)
markshnier2@gmail.com
------------------------------