Skip to main content
When Haven migrates a club from WildApricot (or any other platform), donations come over in two passes: an automatic scrape of your /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
Whatever Haven extracts is seeded into your new org’s Donations → Form and Donations → Designations tabs automatically — the public /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.
After migration, visit Donations → Form and Donations → Designations to confirm the imported configuration matches what you want. AI-driven extraction is best-effort against undocumented HTML — verify before relaunching donor-facing communications.

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

1

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.
2

Open the Import tab

In your admin sidebar, go to Donations → Import. Click Choose CSV file under “Recurring donors”.
3

Run the import

Click Import. Haven parses the file row-by-row and creates one recurring_donations row per donor with status pending_reauthorization.
4

Review the result panel

The result panel reports how many rows imported successfully. Any rows with errors (missing fields, invalid frequency strings, etc.) are listed below with row numbers so you can fix the source CSV and retry.

Expected CSV columns

Header names are matched case-insensitively. Synonyms are accepted where common:
FieldAccepted column namesRequired
Donor name”Donor name”, “Donor”, “Name”, “Full name”
Email”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
Designation names match against your existing 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 the pending_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.
The full reauthorization workflow (tokenized email link → Stripe Payment Element page that resumes the subscription) is on the roadmap but not yet built. For now, treat pending_reauthorization rows as a worklist for personal donor outreach. Conversion is a known migration risk — set expectations with the migrating club’s leadership before importing.

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 a payment_records row with a sequential receipt number for the audit trail.
1

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.
2

Use the Historical donations import

In the same Donations → Import tab, choose your CSV under “Historical donations” and click Import.
3

Review the result

Imported rows are visible in your Donations tab and on each donor’s portal donation history. PDF receipts are downloadable per imported donation.

Expected CSV columns

FieldAccepted column namesRequired
Amount”Amount”, “Donation amount”
Donation date”Date”, “Donation date”, “Paid at”
Donor name”Donor name”, “Donor”, “Name”, “Full name”Optional
Email”Email”, “Donor email” — when matched to an existing Haven member, the row links to their member_idOptional
Designation”Designation”, “Fund”Optional
Anonymous”Anonymous”, “Is anonymous” — accepts Yes/No, True/False, 1/0Optional
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.

Imports are one-shot

Both CSV importers are best-effort and one-shot — they don’t deduplicate against existing rows. Importing the same CSV twice creates duplicate records. Run each import exactly once per source file, and review the result panel for any rows that errored. If a row fails (e.g. missing required field), Haven keeps the rows that succeeded and reports the failures. Fix the source CSV and re-import only the failed rows — don’t re-upload the whole file.