This is the proof step after the export. The job of Phase 1.5 is to show the backup set can actually be restored, inspected, reconciled, and trusted before any real migration or decommissioning work continues.
This is not a production import.
Do not restore into live ActiveCampaign, live Supabase production tables, live GoHighLevel production records, or any system currently sending email or running automations.
Restore only into a quarantined test destination.
Use the completed Phase 1 export set as the fixed source snapshot for the restore test.
Best match for future master-database direction. Safest place to validate restored counts, sample records, and suppression state.
Use temporary tables in a local Postgres database if spinning up a separate Supabase project is blocked.
No restore into anything sharing live integrations, sending infrastructure, or customer-facing workflows.
Create a dedicated restore workspace:
mkdir -p /root/.openclaw/workspace/Restores/activecampaign-migration-restore-test-2026-04-22/{source,working,sql,reports}
Copy the export set into source so the test runs on a fixed snapshot:
cp -R /root/.openclaw/workspace/Exports/activecampaign-migration-2026-04-22/* \
/root/.openclaw/workspace/Restores/activecampaign-migration-restore-test-2026-04-22/source/
Create the report file:
touch /root/.openclaw/workspace/Restores/activecampaign-migration-restore-test-2026-04-22/reports/restore-test-report-2026-04-22.md
The manifest is the source of truth. Current expected values are:
This phase is about proof, not perfect production recreation.
find /root/.openclaw/workspace/Restores/activecampaign-migration-restore-test-2026-04-22/source -type f | sort
head -n 3 /root/.openclaw/workspace/Restores/activecampaign-migration-restore-test-2026-04-22/source/activecampaign/ac-contacts-2026-04-22.csv
head -n 3 /root/.openclaw/workspace/Restores/activecampaign-migration-restore-test-2026-04-22/source/supabase/supabase-purchases-2026-04-22.csv
head -n 3 /root/.openclaw/workspace/Restores/activecampaign-migration-restore-test-2026-04-22/source/payments/stripe-payments-2026-04-22.csv
Stop immediately if files are missing, malformed, truncated, or headerless.
Minimum restore tables:
restore_ac_contactsrestore_ac_tagsrestore_ac_unsubscribesrestore_sb_contactsrestore_sb_purchasesrestore_sb_email_suppressionsrestore_sb_leadsrestore_stripe_customersrestore_stripe_paymentsrestore_paypal_transactionsIf using PostgreSQL directly:
\copy restore_ac_contacts FROM '/absolute/path/to/ac-contacts-2026-04-22.csv' CSV HEADER;
Restore these first:
ac-unsubscribes-2026-04-22.csvsupabase-email-suppressions-2026-04-22.csvIf suppression state fails, pause the whole restore test.
| dataset | expected | restored | pass/fail | notes |
|---|---:|---:|---|---|
| ac_contacts | 25935 | | | |
| ac_tags | 112 | | | |
| ac_unsubscribes | 81 | | | |
| sb_contacts | 195 | | | |
| sb_purchases | 195 | | | |
| sb_email_suppressions | 1 | | | |
| sb_leads | 198 | | | |
| stripe_customers | 4639 | | | |
| stripe_payments | 33368 | | | |
| paypal_transactions | 5964 | | | |
Check at least 5 records total:
This is mandatory. Prove at least one AC unsubscribe row and one Supabase suppression row survive the restore with state intact.
Prove at least one purchaser can still be traced through contact identity, purchase row, and payment evidence where available.
# Restore Test Report — 2026-04-22
## Destination
- type:
- environment:
- isolated from production: yes / no
## Source archive used
- local path:
- manifest path:
## Row-count reconciliation
| dataset | expected | restored | pass/fail | notes |
|---|---:|---:|---|---|
## Sample-record checks
- sample 1:
- sample 2:
- sample 3:
- sample 4:
- sample 5:
## Suppression verification
- AC unsubscribe restored:
- Supabase suppression restored:
- result:
## Issues found
-
## Final verdict
- PASS / FAIL / PASS WITH WARNINGS
## Recommendation
- safe to proceed to migration planning: yes / no
Counts materially correct, sample records match, suppression intact, and no unexplained corruption.
Only small, explained formatting issues. Suppression safety still intact.
Missing suppression, material count mismatches, untrusted destination, or sample records that do not match source.
Do not continue to broader migration until these are resolved.
If restore test passes:
If restore test fails:
A backup is not proven until it restores.