Compare two snapshots without false matches
A dependable comparison needs a stable key, a clear before/after order, and an explicit meaning for a change.
Prepare the two snapshots
Use exports that describe the same kind of record. Put the earlier state in Before and the later state in After. Each table needs a unique, nonblank key. Repeated IDs stop this comparison because one-to-many matches would be ambiguous. Resolve duplicate keys before you interpret differences.
Match identity before comparing content
A row number is usually a poor identifier: sorting inserts and removals changes row positions. A stable order_id or customer_id is more useful. Rowlane supports a different key-column name in each input. Other fields match by exact header name, so moving the qty column does not manufacture a change.
Walk through a complete small example
Before has A with qty 2 and B with qty 4. After has A with qty 3 and C with qty 1. The result is one modified record, one removed record, and one added record. A produces a field-level difference from 2 to 3. A record with several changed fields still counts as one modified record, even though it produces several report rows.
Interpret text differences honestly
The strings 1 and 1.0 differ. So do values with different case or trailing spaces. If your task regards them as equivalent, clean the snapshots consistently before comparison and retain both originals. A missing column is shown as [column absent], which is intentionally different from an existing empty cell. Treat the exported report as a review artifact, not a database update script.