Prerequisites
Confirm the following before connecting. Each prerequisite blocks a specific configuration step downstream, so missing one stops the setup partway through rather than at first sync.- Admin access to both your DualEntry account and your Ramp account.
- Your chart of accounts finalized in DualEntry. GL accounts are pushed to Ramp automatically on connection, so placeholder or temporary accounts appear in Ramp and create cleanup work later.
- Vendors set up in DualEntry. The integration pushes vendors to Ramp and reconciles incoming Ramp merchants against your vendor list by name.
- Companies (entities) configured in DualEntry. Each Ramp entity must map to a DualEntry company before sync runs.
- A chart of accounts that has not been manually uploaded in Ramp. If a CSV chart of accounts is already loaded in Ramp on a fresh account, contact DualEntry support before proceeding; a duplicate-account cleanup is required.
What syncs to and from Ramp
The integration moves accounting data in both directions on every sync run. Ramp pushes spend activity into DualEntry as transactional records, and DualEntry pushes master data (accounts, vendors, classifications, and optionally entities and customers) into Ramp so employees can code expenses against current values. The table below summarizes what flows from Ramp into DualEntry on each sync:
The table below summarizes what DualEntry pushes back to Ramp on every sync:
Merchant is a separate Accounting Field that Ramp creates automatically for card transactions without a full vendor record. It is not part of the DualEntry sync and should not be renamed or deleted.
Switching from another accounting provider
Ramp allows one accounting provider connected at a time, so a cutover from another provider needs planning before you connect DualEntry. Once a Ramp transaction is marked as Synced by any provider, that status is permanent: Ramp will not re-sync that transaction to a new provider. Transactions already synced to your old provider stay there and do not appear in DualEntry. Choose a cutoff date that aligns with the last day you want your old provider to receive data from Ramp, typically the last day of a month or accounting period. Everything from the day after that date forward flows into DualEntry; everything before stays in your previous system.- Choose your cutoff date.
- Before disconnecting, in Ramp open Accounting → Settings and download your accounting data export. The export contains historical bills, transactions, and reimbursements with GL line detail.
- If you used vendor default GL account assignments in Ramp, reconstruct them from the export. Those mappings are tied to the previous accounting connection and do not carry over. Pivot the bills export by vendor and GL account, take the most common GL account per vendor, and re-enter the mappings in Ramp once DualEntry is connected.
- In Ramp, go to Accounting → Settings, locate the current accounting connection, and disconnect it.
- Complete the connection steps below.
- After connecting, in DualEntry navigate to Configuration → Company → Integrations → Ramp → Settings and set the Initial Cut-Off Date field to the day after your last sync with the old provider. If you leave it blank, DualEntry pulls from the integration connection date forward.
Set the Initial Cut-Off Date a few days earlier than your last sync date rather than exactly on it. Ramp will never re-sync a transaction that was already synced to your previous provider, so going back a few days costs nothing. This captures any transactions that were dated slightly earlier and hadn’t made it through to your old system before you disconnected.
Step 1: Connect DualEntry to Ramp
Authorize Ramp to share data with DualEntry through OAuth. The connection is initiated from DualEntry, not from Ramp, so you don’t paste API keys or credentials anywhere. The OAuth flow handles authentication and returns an access token that DualEntry stores against the integration.- In DualEntry, navigate to Configuration → Company → Integrations.
- Find Ramp in the integrations list and choose Connect.
- DualEntry redirects you to Ramp’s OAuth authorization screen. Sign in with your Ramp admin credentials and approve the access request.
- Ramp redirects you back to DualEntry. The integration status now shows as Connected.
Step 2: Map Ramp entities to DualEntry companies
Each Ramp entity must be mapped to a DualEntry company before any data syncs. If your entity names in Ramp exactly match your company names in DualEntry, the integration suggests mappings automatically. Confirm each suggestion or pick the correct company from the dropdown.- From the Ramp integration page, open the Settings panel.
- Under Default Settings, choose the Companies Mapping tile.
- For each Ramp entity in the left column, choose the corresponding DualEntry company from the dropdown on the right.
- Choose Save.
Step 3: Configure system accounts
For each company, map the system accounts that DualEntry uses to post Ramp transactions. These tell DualEntry where to record the offsetting entries for each transaction type, so Ramp activity lands on the correct credit card liability, bank, and AP accounts. From the Ramp Settings panel, choose the System Accounts Mapping tile. Use the Company dropdown at the top to choose each company in turn, configure the accounts in the table below, and choose Save after each company.Step 4: Configure Ramp Accounting Field Settings
Decide which DualEntry data syncs to Ramp, and whether each one applies at the header or line level of a bill.- In DualEntry, navigate to Configuration → Company → Integrations → Ramp → Settings.
- Choose the Ramp Accounting Field Settings tile. Its controls are organized into three sections: classification sync, entity sync, and customer sync.
- Set Active and Splittable for each classification, then turn Entity sync and Customer sync on if you need them. The sections below explain what each control does.
- Choose Save, then trigger a sync to create or update the fields in Ramp.
Classification sync
Every classification in DualEntry (departments, classes, locations, custom dimensions) appears as its own row. For each one, you can:- Active - turn the classification’s sync to Ramp on or off.
- Splittable - choose whether it applies at the line level of a bill (independently selectable per line) or the header level (applied to every line of the bill automatically).
How nested classifications appear in Ramp
Each DualEntry classification becomes one Ramp Accounting Field, and each of that classification’s values becomes one option on the field. Ramp Accounting Fields are single-choice option lists with no nesting of their own. A classification organized as a parent-child hierarchy in DualEntry arrives in Ramp as a flat list of options. The values are pushed by name, and a value’s parent is not sent alongside it. Two consequences follow. First, a Ramp cardholder picking a value sees every value in the classification in one list rather than drilling from parent to child. Values that are only meaningful under a specific parent are still selectable on their own. Second, if two values in different branches of the hierarchy share a name, they are indistinguishable in the Ramp picker even though DualEntry treats them as separate values. Give hierarchical values names that stand alone if you sync them to Ramp. For example:- Avoid:
US→WestandEMEA→Westboth arrive in Ramp asWest. - Use:
US→US WestandEMEA→EMEA Westarrive in Ramp asUS WestandEMEA West.
Entity sync
Entity sync is off by default. Turning it on pushes your DualEntry companies to Ramp as a single Accounting Field named DualEntry Entity. It is splittable by default so it can be applied at the line level of a bill. This is what powers automatic intercompany billing. See Intercompany billing.Customer sync
Customer sync is off by default. Turning it on pushes your DualEntry customers to Ramp as a single Accounting Field named DualEntry Customer. It is splittable by default so it can be applied at the line level of a bill. Use it to tag bills, reimbursements, or card transactions against a customer for COGS reporting or chargebacks.Header-level vs. line-level (splittable) fields
This choice only affects bills, since reimbursements and card transactions in Ramp only ever have one line.- Line-level (splittable): the value can be set independently on each line of a bill.
- Header-level: the value is set once and applied to every line of the bill when it syncs to DualEntry.
{Name} - lines; when header-level, it is named exactly {Name}.
Switching a field between header-level and line-level only affects bills imported after the change. Bills that synced before the change are not updated retroactively.
Step 5: Configure posting dates and the sync cutoff
Three settings control how Ramp dates map to DualEntry posting dates and when the sync starts pulling transactions. All three live in DualEntry under Configuration → Company → Integrations → Ramp → Settings and are safe to change before the first sync. Initial Cut-Off Date. If you are migrating from another provider or only want to pull transactions from a specific date forward, set this date before triggering the first sync. When left blank, DualEntry pulls all transactions from the integration connection date forward. See Switching from another accounting provider for the recommended approach if you’re cutting over from an existing connection. Map accounting date to posting date in DualEntry. This setting applies to bills and credit card transactions that have an accounting date set in Ramp. When on, DualEntry uses the Ramp accounting date as the posting date. When off (the default), DualEntry uses the bill issued date. This is particularly relevant when connecting mid-period: if a bill has an accounting date in a prior period, posting by transaction date avoids inadvertently reopening that period. Use approval date as posting date for reimbursements. Ramp reimbursements don’t have an accounting date, so by default DualEntry uses the bill issued date. When on, DualEntry uses the reimbursement approval date instead. This is useful for teams where employees submit expenses after month-end close, ensuring reimbursements post in the period they are processed rather than the period the expense occurred. Changes to either date setting only affect transactions imported after the change. Previously synced transactions are not retroactively updated, though they can be archived and replaced manually if needed.Step 6: Trigger your first sync
Once entity mapping and system accounts are configured for every company, kick off the initial sync from DualEntry. The first sync does the bulk of the work. It pulls historical Ramp transactions from your Initial Cut-Off Date forward. It also pushes your DualEntry chart of accounts, vendors, classifications, and, if enabled, entities and customers into Ramp as Accounting Fields.- Navigate to Configuration → Company → Integrations → Ramp.
- Choose Sync Now.
- Allow a few minutes for the first sync to complete; accounts with extensive history can take longer.
- Review the sync log and error table for any issues. Errors on individual records do not block the rest of the sync, so the log is where you find which specific records failed.
How DualEntry enforces source of truth in Ramp
DualEntry enforces its own values as the source of truth for the classification Accounting Fields it pushes to Ramp, so edits made on the Ramp side are reconciled rather than kept. The table below summarizes how DualEntry responds to each kind of Ramp-side change:
For DualEntry Entity and DualEntry Customer, DualEntry still overwrites Ramp-side renames and recreates missing options on the next sync when those syncs are Active. Deleting either field in Ramp does not change DualEntry master data; if sync is still on, DualEntry recreates the field on the next sync.
Once a transaction is marked Synced in Ramp, it cannot be edited there. A transaction tagged with a classification value or a DualEntry Entity option that DualEntry does not recognize is rejected rather than imported with missing or incorrect coding. Create the matching value in DualEntry, run a sync, then re-tag the transaction in Ramp so it imports successfully. Unrecognized DualEntry Customer values are not imported as customer tags, but they do not by themselves block the rest of the transaction.
DualEntry Entity and DualEntry Customer are exceptions on the inbound side: changes made to those fields or their options in Ramp never update DualEntry companies or customers.
Intercompany billing
The Ramp integration supports two intercompany billing patterns, and they are not mutually exclusive. You can use both depending on the transaction.Method 1: Line-level entity allocation
A single Ramp bill can be paid by one entity and have its expenses allocated across multiple entities at the line level. The top-level company on the bill is the paying entity (the company that owes the vendor). Each line can then be assigned to a different entity using the DualEntry Entity Accounting Field in Ramp, representing the company that actually incurred that expense. When the bill syncs to DualEntry, intercompany payables and receivables are generated automatically between the paying company and each expensing company on the lines. To enable this pattern:- In DualEntry, go to Configuration → Company → Integrations → Ramp → Settings → Ramp Accounting Field Settings.
- Under Entity sync, turn the toggle Active on. Leave Splittable on (the default) so the field is available at the line level of bills.
- Save your changes, then trigger a sync.
- DualEntry automatically creates a DualEntry Entity Accounting Field in Ramp with one option per active DualEntry company. No manual upload is required.
Method 2: Pay-on-behalf via bank account routing
A second pattern handles the case where one entity pays a Ramp bill on behalf of another, for example, a parent company paying subsidiary expenses centrally. When a Ramp bill is paid, DualEntry checks the bank account used for payment. If that bank account is mapped to a different DualEntry company than the company on the bill, DualEntry treats this as a pay-on-behalf intercompany payment automatically. DualEntry creates:- A bill on the expensing company (the entity on the bill).
- A vendor payment attributed to the paying company (the entity whose bank account was used).
- Intercompany payable and receivable entries between the two companies, generated when the vendor payment is posted.
Settings reference
These settings live in DualEntry under Configuration → Company → Integrations → Ramp → Settings and control how transactions flow from Ramp into DualEntry.Diagnose common sync issues
When a record fails to sync, it appears in the integration error log under Configuration → Company → Integrations → Ramp. Errors on individual records do not block the rest of the sync, so the log is the canonical place to look when a category of transactions stops landing. This section covers the symptom-level checks for the issues you’re most likely to hit; see Resolve specific error messages for the per-error-code resolutions.Connected but nothing is syncing
The most common cause is incomplete entity mapping. DualEntry does not run the main sync until every Ramp entity has been mapped to a DualEntry company. Open the Ramp Settings panel, choose Companies Mapping, and confirm every entity has a company assigned. If mapping is complete, allow up to two hours for the next scheduled sync, or choose Sync Now to trigger immediately, then check the error log.Transactions posting to the wrong date
Review your date posting settings under Configuration → Company → Integrations → Ramp → Settings. If transactions are posting in a period you didn’t expect, check whether Map accounting date to posting date in DualEntry matches your intended behavior. Changes only affect future imports; already-synced transactions are not updated retroactively.Transactions posting to the wrong GL account
Review the account mapping in the Ramp Settings panel under System Accounts Mapping. If a GL account was lost or changed (for example, after a chart of accounts cleanup), remap the affected system accounts.A bill synced but the vendor payment is missing
DualEntry reports a bill as successfully synced to Ramp (so Ramp marks it as Synced) even if the vendor payment failed to post separately. Check the integration error log for a payment-level error. Common causes:Card transactions are not coming through
Confirm that the transactions are marked Ready to Sync in Ramp, or whether the Sync Ready filter setting should be turned off for your use case. Confirm that entity mapping is complete for the entity the transactions belong to. Also confirm that the Ramp Credit Card Account is configured for that entity under System Accounts Mapping.Resolve specific error messages
Specific error messages and duplicate-detection flags show up directly in the integration error log on individual records. Each one points at a precise piece of configuration, master data, or Ramp-side state; the H3s below give you the fix per error.Entity or system account errors
These errors all point at the same root cause: a missing piece of configuration on a specific company. Open the Ramp Settings panel, choose the relevant tile, and complete the setup for the company named in the error.A bill is stuck in the error log and retrying doesn’t fix it
If a bill is persistently failing, confirm the bill is in an approved status in Ramp. Bills that are rejected or terminated will not sync. If the bill appears approved in Ramp but is still stuck, recreate it from the recreate path on the error table row. If the error reason is not displayed, contact DualEntry support.Possible duplicated transaction found
The duplicate detection check flagged this transaction as a potential duplicate of one already in DualEntry. Review the flagged transaction manually. If it is confirmed unique, retry the sync for that record from the error log.Vendor from Ramp isn’t showing up in DualEntry
Vendors reconcile automatically by name. A mismatch between the Ramp merchant name and an existing DualEntry vendor can create a duplicate vendor. Check your vendor list and merge if needed.Duplicate accounts appearing in Ramp
This happens when a chart of accounts was manually uploaded in Ramp before connecting DualEntry. Contact DualEntry support; a cleanup script resolves duplicate account mappings.Result
After completing these steps, Ramp card transactions, bills, reimbursements, statement payments, and cashback flow into DualEntry every two hours, and your DualEntry chart of accounts, vendors, classifications, and, if enabled, entities and customers stay current in Ramp without manual uploads. DualEntry remains the source of truth throughout: renamed or deleted values in Ramp are reconciled automatically, and unrecognized coding is rejected rather than silently imported. DualEntry handles intercompany allocations on bills and pay-on-behalf payments automatically. This happens when the Ramp entity on a bill line, or the bank account on a payment, points at a different DualEntry company. To validate the integration is healthy after each scheduled sync, confirm three things in DualEntry:- New Ramp activity appears under the expected company.
- The integration error log on Configuration → Company → Integrations → Ramp is empty, or every entry is a known exception.
- The DualEntry Entity, DualEntry Customer, and classification fields in Ramp reflect your current DualEntry master data.

