Comparing migrated data with Airtable
I compare row counts, normalized checksums, relationships, and selected records before switching to a migrated copy. Attachments and long text need checks too. The comparison is only meaningful if it uses a current, consistent source snapshot.
I use this reference example to explain the method and checks to try. It includes no client names, schemas, data, or reported results.
How do I check a migrated copy against Airtable?
I compare row counts, normalized checksums, relationships, and selected records before switching to a migrated copy. Attachments and long text need checks too.
Method
- Compare row counts per table, and per relation for join tables.
- Checksum a normalised projection of each row, so formatting differences do not create false mismatches.
- Verify referential integrity: no orphan children, no dangling join rows.
- Sample high-value records and compare field by field, including attachments and long text.
- Re-run the whole reconciliation immediately before cutover, not once a week earlier.
select md5(string_agg(row_key, '|' order by row_key)) as table_digest
from (
select id::text || ':' ||
coalesce(name, '') || ':' ||
coalesce(to_char(amount, 'FM999999990.00'), '') as row_key
from invoices
) s;What can go wrong
- Comparing raw strings where the two systems format numbers or dates differently.
- Ignoring attachments because they are stored elsewhere.
- Reconciling a stale snapshot while the base keeps changing.
Checks to try
- All digests match on a frozen source snapshot.
- Check that no relationship points to a missing record.
Questions this pattern answers
How do I check a migrated copy against Airtable?
I compare row counts, normalized checksums, relationships, and selected records before switching to a migrated copy. Attachments and long text need checks too.
What steps does this method use?
Compare row counts per table, and per relation for join tables. Checksum a normalised projection of each row, so formatting differences do not create false mismatches. Verify referential integrity: no orphan children, no dangling join rows. Sample high-value records and compare field by field, including attachments and long text. Re-run the whole reconciliation immediately before cutover, not once a week earlier.
How can I check the result?
All digests match on a frozen source snapshot. Check that no relationship points to a missing record.
What can go wrong with this approach?
Comparing raw strings where the two systems format numbers or dates differently. Ignoring attachments because they are stored elsewhere. Reconciling a stale snapshot while the base keeps changing.
Related patterns
Inspecting Airtable dependencies →
The inventory includes forms, scripts, automations, and people’s work.
Preserving Airtable linked records →
Relationship checks compare linked records across systems.
Mapping Airtable automations and scripts →
Each automation has a documented trigger and target.
Checking access after an Airtable migration →
Access checks compare what each person can read and change.
I explain this method here. The Airtable Rescue Decision Sprint can recommend staying, repairing, connecting tools, or migration. TechTide AI publishes current scope, prices, and terms.
Airtable Rescue Decision Sprint at TechTide AI→© 2026 Alex Cinovoj · TechTide AI · Columbus, OH