Merge to Finch Transition Guide: Best Practices
Last updated: October 29, 2026
Overview
This guide is for teams moving their HRIS and payroll integrations from Merge to Finch. It covers what carries over, what your engineering team will need to change, the technical differences between the two APIs, and how Finch's implementation team supports you through the switch.
At a glance
What stays the same: The basic pattern is the same: an embedded auth modal, one token per employer connection, normalized employee data, daily syncs, webhooks, and a passthrough option for non-standard data. Teams that already built a provider-agnostic adapter for Merge can usually plug Finch into it.
What changes: Each employer has to reconnect through Finch Connect. Custom field mappings need to be rebuilt. Multi-entity employers need per-entity requests. Employment status values and webhook event names are different, and rate limits need to be planned for.
Support model: You get a dedicated Implementation Engineer through go-live and migration, then a Developer Success Engineer and an Account Manager for the long term.
What stays the same
Most of the integration mechanics map one-to-one. Think of it like plugging Finch into your existing generic sync adapter you already built to support Merge.
Concept | Merge | Finch |
|---|---|---|
Employer authentication | Merge Link | Finch Connect (embedded SDK or redirect URL via |
Per-employer credential | Linked Account / account token | Access token tied to a stable |
Core people data | Employees, Employments, Groups, Locations (Common Models) |
|
Sync cadence | Highest or Daily (automatic), or Monthly/Quarterly (manual), depending on plan | Every 24 hours for automated integrations, every 7 days for assisted |
Event notifications | Webhooks | Webhooks (account, job, and data-change events) |
Data outside the standard model | Field Mappings, Remote Fields, Authenticated Passthrough | Employment |
Quick reference links:
What needs to change on the technical side:
1. Rebuild custom field mappings
This was the largest source of migration work. Employers who relied on Merge Field Mappings, for example to filter or sort employees by a custom attribute, need those mappings recreated against Finch data. Finch doesn't automatically bring Merge mappings over.
Inventory first: Before migrating, list every employer with custom mappings, along with the fields and providers involved. Share the list with your Implementation Engineer so Finch can help coordinate.
Check the standard model: Many "custom" fields are already in the Finch data model. Examples include
preferred_name,department,manager,location, andemployment.subtype.Employment custom fields:
/employmentreturns acustom_fieldsarray of name/value pairs where the provider supports it. Custom fields aren't available on assisted connections.Request Forwarding: For data outside the Finch model, Request Forwarding (
POST /forward) sends a request to the provider's own API using the employer's Finch credentials. Finch doesn't transform these requests or responses, so you own the parsing and mapping. It's available on Pro and Premier plans, and supports a specific list of providers.Run in parallel: Even employers with no Merge mappings may need new ones, because default field coverage differs between the two platforms. Test both cases.
2. Handle multi-entity employers
Some employers have several entities in one payroll system, such as EINs, company codes, or divisions. Finch represents these with multi-entity mode:
The token exchange returns one access token and a list of
entity_ids.Every request on a multi-entity token needs an
entity_idsquery parameter, and you can pass only one entity at a time. If you leave it out, the request fails withentity_id_required. Single-entity tokens don't need the parameter.Request each entity separately and combine the results in your app.
/introspectlists the entities and their status.If an employer selected the wrong entities, a re-authentication session lets them update their selection.
3. Update employment status and termination logic
Finch returns an explicit
employment_status(active,leave,onboarding,prehire,retired,deceased,terminated), plusis_active,start_date, andend_date.Merge marks terminated employees with an
employment_statusofINACTIVEand a termination date.Parsing logic written for Merge may not filter out Finch's
terminatedstatus.
4. Map names and other defaults deliberately
Check that each field means the same thing on both platforms. For example, one customer changed their mapping to use preferred_name first and fall back to the legal first name, to match what their product showed under Merge. Use a parallel run to compare outputs field by field.
5. Update webhook handling
Initial and recurring syncs send different job events:
job.initial_data_sync_*.succeededfor the first sync andjob.data_sync_all.completedfor later ones. Handle both.Data-change webhooks (
employment.updated,individual.updated, and so on) contain IDs only, not the changed record. Use them to decide which connections need a refresh, then fetch the updated records.Verify the
Finch-Signatureheader on every webhook.Use account and job webhooks to confirm on your side that every connection the Dashboard shows as successful also shows up correctly in your app.
6. Design for Finch rate limits
Finch rate limits apply:
Use the batch endpoints (
/individual,/employment) and add client-side throttling that backs off before you get a429.Finch's rate limits assume you refresh data when it changes, not that you pull a full sync for every connection every day. Data-change webhooks let you skip connections with no changes.
Request Forwarding calls add to your request volume, so include them in your capacity planning.
If your product needs every connection synced in a tight window, such as overnight before a 9 AM send, raise this early with your Implementation Engineer.
7. Build a re-authentication flow that doesn't disconnect
When a connection needs reauthentication, for example after a 401 or an expired provider credential, send the employer through POST /connect/sessions/reauthenticate. Don't disconnect and start over. Re-authentication keeps the same connection_id and issues a new token.
Technical difference: normalized data vs. raw payloads
This is the biggest conceptual change for teams coming from Merge.
Merge: Merge can return a
remote_dataarray next to its normalized Common Model fields. The array holds the provider's original, unnormalized response for each underlying API path. Merge Field Mappings depend onremote_data, and teams can browse the raw payload to find and map fields themselves.Finch: Finch returns the normalized Finch data model only. There's no full raw provider response in standard API responses. Finch handles provider-specific parsing, normalization, and quirks, so your code works against one consistent schema across providers.
When you need something outside the model: Use employment
custom_fieldswhere supported. Use Request Forwarding for providers on the supported list, which returns the provider's own response for you to parse. Or ask your Implementation Engineer to confirm whether Finch already supports the field or can add it.
What this means in practice: Your engineers write less provider-specific code, but you can't self-serve every raw field the way remote_data allowed. Teams with many custom mappings should inventory them early and work through them with Finch before migrating those employers.
Operational considerations:
1. Every employer reconnects through Finch Connect
Existing Merge connections don't carry over. Each employer completes Finch Connect, and your app exchanges the authorization code for a Finch access token. Plan the employer outreach as its own workstream.
Use
POST /connect/sessionswith a stablecustomer_idfor each employer. Reuse it across retries so abandoned attempts don't create duplicate staged connections. See the Connection & Session ID guide.
Staged sessions that were started but not completed stay visible in the Dashboard. They aren't billable.
Link to Finch's provider-specific authentication guides from your own help center, especially for your highest-volume providers. Finch Connect also shows in-modal instructions when an employer needs to take an extra step.
2. Plan for assisted integrations
Finch offers integrations to providers that have no API available through Finch Assist. If you plan to use assisted integrations, you should plan for:
Pass
manual: truewhen you create the Connect session, or assisted providers won't appear in Finch Connect. This flow also has to be enabled for your application.Data refreshes every 7 days instead of every 24 hours. There's a one-time setup period before data is available, and data endpoints return
202until it's ready.Custom fields and on-demand syncs aren't supported.
Set up email forwarding early. Finch requires it for assisted connections so the connection stays authenticated, and it often takes longer to set up than teams expect.
Recommended migration plan
Phase 1: Plan and inventory
Export every live Merge Linked Account. For each one, record the provider, entity count, custom mappings, filters or exclusions, and any provider Finch doesn't currently support.
Share the inventory with your Implementation Engineer. Finch checks provider coverage and custom fields, and scopes any providers that aren't supported yet. New integrations usually launch as assisted first and need a test employer account.
Agree on success metrics, such as reliability and uptime, time to connect, and integration-related engineering tickets, so you can compare against your Merge baseline.
Phase 2: Build and validate
Work through Finch's technical implementation checklist. It covers all the essentials for a successful integration.
Test in the Finch Sandbox and Provider Sandbox.
Phase 3: Pilot
Start with a small group of employers on your highest-priority providers. Prioritize migrating one provider at a time so provider-specific issues come up early and stay contained.
Include at least one employer with no custom mappings and one with mappings.
Your Implementation Engineer monitors these first connections on Finch's side.
Phase 4: Run in parallel and check data parity
Keep each employer's Merge connection live until their Finch connection is verified.
Compare synced data from both sources, recreate mappings, and preview the mapped output before switching over.
Phase 5: Full employer rollout with outreach and cutover
Send employers their Finch Connect links in batches, and expect a spike in new connections after each send.
Assign an owner to follow up on staged sessions that weren't completed.
After an employer's Finch connection is verified, switch them over and remove their Merge Linked Account.
Watch your connection count against your Finch plan as volume ramps up.
The Finch white-glove migration experience
Moving providers involves your engineering team, your customer success team, and every employer you serve, not only your code. Finch provides guided support at each stage:
Dedicated Implementation Engineer: Your main contact from kickoff through go-live and the early migration. They run weekly check-ins, review your technical checklist, monitor your first production connections, pre-validate custom field availability, and coordinate with Finch engineering, product, and partnerships for you.
Structured kickoff and project plan: Shared goals, success metrics, milestones, and project tracking for both teams' action items.
Customer success enablement: Troubleshooting training for your CS team so they can quickly tell how to troubleshoot questions. Also go-to-market resources such as talk tracks/objection handling, security FAQs, and branded collateral.
Long-term support: After implementation, a Developer Success Engineer is your ongoing technical contact and an Account Manager handles strategy and business reviews.
Questions? Contact your Implementation Engineer or Developer Success Engineer, or email developers@tryfinch.com.