/donate page configuration, and a manual CSV import for recurring donors and historical donation records.
Automatic: form + designations
When the migration scraper visits your old/donate page, it extracts:
- The donation form’s heading and description
- Preset amount buttons (in cents)
- Whether custom amounts were allowed
- Fundraising goal + thermometer state
- Anonymity option visibility
- Which recurring frequencies were offered (monthly, quarterly, semi-annually, annually)
- The list of fund designations donors could choose from, with the default selection preserved
/donate page works on day one of your new Haven site.
The raw extracted shape is also stored in donation_forms.wa_form_config for audit purposes, so you can see exactly what the scraper read from the source.
Manual: CSV import for recurring donors and history
Recurring donor subscriptions and historical donation records can’t be scraped from a public donate page — they live in your old platform’s admin database. Export them to CSV and use the Donations → Import tab to bring them over.Recurring donors
Export from your old platform
Pull a CSV of every active recurring donor. The export should include at minimum donor name, email, recurring amount, and frequency. WildApricot’s recurring donations export covers all of these.
Open the Import tab
In your admin sidebar, go to Donations → Import. Click Choose CSV file under “Recurring donors”.
Run the import
Click Import. Haven parses the file row-by-row and creates one
recurring_donations row per donor with status pending_reauthorization.Expected CSV columns
Header names are matched case-insensitively. Synonyms are accepted where common:| Field | Accepted column names | Required |
|---|---|---|
| Donor name | ”Donor name”, “Donor”, “Name”, “Full name” | ✅ |
| ”Email”, “Donor email” | ✅ | |
| Recurring amount | ”Amount”, “Recurring amount”, “Donation amount” | ✅ |
| Frequency | ”Frequency”, “Recurring frequency”, “Schedule” — text like “Monthly”, “Quarterly”, “Semi-annually”, “Annually” | ✅ |
| Designation | ”Designation”, “Fund”, “Designation name” | Optional |
| Last charged date | ”Last charged”, “Last donation date”, “Last payment” | Optional |
| Subscription id (from old platform) | “Subscription id”, “WA recurring id”, “WA subscription” | Optional |
donation_designations rows by lowercased name. Donors whose designation can’t be resolved get assigned to the implicit general fund (NULL designation).
Why pending_reauthorization?
Imported recurring donors land in thepending_reauthorization status because their saved payment method lives in the old platform (typically Personify Payments for WildApricot migrations) and can’t be transferred to Stripe. The donor must re-enter their payment method on Haven to convert their subscription.
Until then:
- The subscription is not active — Stripe isn’t charging the donor yet.
- The row is visible in your Recurring tab with status badge “Awaiting payment”, so you can track conversion attrition.
- You can communicate with affected donors via the Messages tab to walk them through reauthorization.
Historical donations
For donor portal display, donor-history reports, and audit completeness, you can also import a CSV of past one-time donations. Each row creates apayment_records row with a sequential receipt number for the audit trail.
Export historical donations from your old platform
Most platforms support an “all donations” or “donation history” export. Pull at minimum the donor name (or email), amount, and donation date.
Use the Historical donations import
In the same Donations → Import tab, choose your CSV under “Historical donations” and click Import.
Expected CSV columns
| Field | Accepted column names | Required |
|---|---|---|
| Amount | ”Amount”, “Donation amount” | ✅ |
| Donation date | ”Date”, “Donation date”, “Paid at” | ✅ |
| Donor name | ”Donor name”, “Donor”, “Name”, “Full name” | Optional |
”Email”, “Donor email” — when matched to an existing Haven member, the row links to their member_id | Optional | |
| Designation | ”Designation”, “Fund” | Optional |
| Anonymous | ”Anonymous”, “Is anonymous” — accepts Yes/No, True/False, 1/0 | Optional |
Historical donations are NOT re-receipted. The original receipts came from your old platform; the imported rows exist for portal display + audit only. The
receipt_sent_at field is set to the donation date so the system knows not to re-send.