How to Migrate AffinityQuest Records to Salesforce NPSP with Data Loader

AffinityQuest to Salesforce NPSP migration guide using Data Loader. Learn field mapping, ISO 8601 dates, and stage picklist transforms for nonprofits.

Jun 26, 2026
How to Migrate AffinityQuest Records to Salesforce NPSP with Data Loader
Migrating donor records from AffinityQuest into Salesforce's Nonprofit Success Pack (NPSP) is one of the most technically demanding data operations a nonprofit can take on — and one of the most underserved topics in the Salesforce ecosystem. If your organization is moving hundreds of thousands of constituent and gift records across two objects, this step-by-step guide explains exactly how to do it using Salesforce Data Loader, including the date formatting and stage field transformations that trip up most teams.
Photo by Stephen Dawson on Unsplash
Photo by Stephen Dawson on Unsplash

What Is AffinityQuest and Why Migrate to NPSP?

AffinityQuest (sometimes spelled Affinaquest) is a donor management and fundraising application built natively on Salesforce. It uses custom objects — such as specialized gift and constituent tracking objects — that sit outside NPSP's standard architecture. Organizations often decide to consolidate onto NPSP's standard Opportunity and Contact objects to simplify their tech stack, improve ecosystem compatibility, and reduce long-term maintenance overhead.
The migration is not a straightforward export and re-import. AffinityQuest's custom objects don't map directly to NPSP's standard schema, so you'll need to plan for:
  • Object-to-object mapping across your source and target structures
  • Date field reformatting from default formats to ISO 8601
  • Opportunity stage mapping to match NPSP's required picklist values
  • Load sequencing — parents before children
  • Hardware and performance constraints when working with large volumes (400K+ rows per object)

Step 1: Map Your Objects and Fields Before Touching Data Loader

Before opening Data Loader, build a field-level mapping spreadsheet. For a typical AffinityQuest-to-NPSP migration, you'll be mapping two source objects to two target objects:
Source (AffinityQuest)
Target (NPSP)
Custom Constituent Object
Contact / Household Account
Custom Gift Object
Opportunity
For each field, document:
  • Source field name and data type
  • Target API name and data type
  • Any transformation required (reformat, recode, leave as-is)
  • Whether the field is required in the target
If your target fields are already configured in Salesforce, you don't need to recreate them — but confirm their API names exactly as Data Loader will expect them in the CSV header row.

Step 2: Reformat All Date Fields to ISO 8601

This is the most common source of import errors on large nonprofit migrations. Salesforce Data Loader requires dates in ISO 8601 format — not the default Excel date format your export will likely produce.

Accepted formats for Salesforce Data Loader

  • YYYY-MM-DD
  • YYYY-MM-DDThh:mm:ssZ
  • YYYY-MM-DDThh:mm:ss.sssZ

Fields that almost always need reformatting

  • Audit fields: Created Date, Last Modified Date (needed to preserve historical data integrity)
  • Gift close dates and any other Opportunity date fields
  • Custom date/time fields specific to AffinityQuest's object model

Bulk reformatting approaches

In Excel or Google Sheets:
=TEXT(A2,"YYYY-MM-DD")
Add this as a helper column, then paste-as-values before saving your CSV.
Using Zapier Formatter:
If your machines can't handle the file size (a common issue at 400K+ rows), Zapier's Formatter → Date/Time → Format action can handle date conversion in batches without local hardware constraints. Note that a temporary plan upgrade may be needed depending on task volume — typically around $200 for one month.
Using Python (recommended for large files):
import pandas as pd df = pd.read_csv('export.csv') df['Close_Date'] = pd.to_datetime(df['Close_Date']).dt.strftime('%Y-%m-%d') df.to_csv('export_transformed.csv', index=False)
Preserve audit fields: Salesforce allows you to retain Created Date and Created By from your legacy system, but you must enable "Allow audit field updates" in your org's Setup before loading.

Step 3: Map Opportunity Stage Values to Valid NPSP Picklist Options

NPSP enforces picklist validation on the Opportunity Stage field. Any value from AffinityQuest that doesn't exactly match an NPSP stage name will cause a row-level error during import.
A common example:
AffinityQuest Value
NPSP Target Value
Accepted
Closed Won
Pending
Prospecting
Declined
Closed Lost
Before running your load:
  1. Export a list of every distinct stage value in your source data
  1. Cross-reference each one against your NPSP org's Stage picklist (Setup → Object Manager → Opportunity → Fields → Stage)
  1. Apply a VLOOKUP or find-and-replace to recode every value in your CSV
Any unmapped value will appear in the Data Loader error file. Fix all of them before your production run.

Step 4: Load Objects in the Correct Order

Parent objects must be loaded before child objects, or you'll have no AccountId or ContactId to reference when loading Opportunities.
Recommended load order:
  1. Contacts / Accounts (constituent and household records)
  1. Opportunities (gift records), using the IDs generated in Step 1
After loading Contacts, export the newly created Id values from Salesforce and join them back to your Opportunity CSV using your legacy constituent identifier as the matching key.

Step 5: Run a Sandbox Test Load First

Never attempt a production load of 800K records without a validated sandbox run. The process:
  1. Extract a representative sample — 500 to 1,000 records per object, including edge cases (records with null dates, non-standard stage values, etc.)
  1. Load the sample into a Full Sandbox copy of your NPSP org
  1. Verify row counts in both the Data Loader success file and Salesforce reports
  1. Manually inspect at least 20 records across both objects
  1. Run a duplicate detection report
Only proceed to production once the sandbox run is fully clean.

Step 6: Monitor the Production Load and Verify Results

Data Loader generates two output files after every run:
  • success.csv — records that were inserted successfully, including their new Salesforce IDs
  • error.csv — every failed row with an error message
After your full load, run a record count report in Salesforce and compare it to your source file row count. Discrepancies greater than 0.1% warrant investigation before signing off.

Common error categories to watch for

  • Date format issues (see Step 2)
  • Missing required fields
  • Invalid picklist values (see Step 3)
  • Duplicate detection rules triggered
  • External ID mismatches during relationship loads

Budget and Effort Expectations

For a migration of this scale — two objects, roughly 800,000 total records, with moderate transformation complexity — here's a realistic effort breakdown:
Phase
Estimated Effort
Field mapping and transformation prep
2–4 hours
Sandbox test load and debugging
2–3 hours
Production load and verification
2–4 hours
Audit field and date formatting
1–2 hours
Total
5–13 hours
The biggest variable is the data quality of the source export. Clean, well-structured AffinityQuest exports with consistent date formats can compress this timeline significantly. Messy or inconsistently formatted exports will expand it.
If your internal team hasn't run Data Loader migrations at this scale before, working with an experienced consultant for at least the sandbox phase can prevent costly errors in production.

When to Bring in Expert Help

A few situations where professional support pays for itself quickly:
  • Your team's hardware can't open and process 400K+ row CSV files reliably
  • You're unsure how to preserve audit fields or maintain referential integrity across objects
  • You need the migration completed within a fixed budget and can't afford a failed production run
  • Zapier is already part of your stack and you want to use it for transformation automation

Get expert help with your AffinityQuest migration

Migrating 800,000+ donor records from AffinityQuest to Salesforce NPSP involves field mapping, date reformatting, picklist transforms, and load sequencing that can go wrong in production. Connex Digital has run migrations like this before — and knows where the errors hide. We can take the preparation and execution off your team's plate so your data arrives clean.
Book a free call to talk through your migration scope and what it takes to get it done right. Schedule a free consultation.