Linking Ramp as a source
The Ramp source is currently in alpha. It has been tested against Ramp's developer API documentation but not yet battle-tested with live production workloads. If you run into issues, please let us know.
The Ramp connector syncs your corporate spend data into PostHog, including transactions, reimbursements, users, cards, and departments.
Adding a data source
- Go to the Data pipeline page and select the Sources tab.
- Click + New source and select Ramp by clicking the Link button.
- Select your Environment from the dropdown:
| Label | Connects to |
|---|---|
| Production | api.ramp.com |
| Sandbox (demo) | demo-api.ramp.com |
- Enter your Client ID and Client secret. These come from a developer app you create in Ramp (see Creating a developer app below).
- Click Next.
- Select the tables you want to import, set the sync method and frequency, then click Import.
The data warehouse then starts syncing your Ramp data. You can see details and progress in the data pipeline sources tab.
Creating a developer app
To connect Ramp to PostHog, you need to create a developer app with the correct read scopes:
- In your Ramp dashboard, go to Settings > Developer API.
- Create a new developer app.
- Grant the following read scopes:
transactions:readreimbursements:readusers:readcards:readdepartments:read
Ramp locks scopes when the developer app is created. You can't add scopes later – make sure all five read scopes are granted before creating the app.
- Enable client credentials authentication on the app.
- Copy the Client ID (starts with
ramp_id_...) and Client secret (starts withramp_sec_...) – you'll need both when linking the source in PostHog.
Configuration
| Option | Type | Required |
|---|---|---|
Environment | select | Yes |
Client ID | text | Yes |
Client secret | password | Yes |
Supported tables
| Table | Description | Sync method | Incremental field | Primary key |
|---|---|---|---|---|
transactions | A card transaction (purchase) made on a Ramp card. | Incremental, Full refresh | user_transaction_time | — |
reimbursements | An out-of-pocket expense reimbursement request in Ramp. | Full refresh | — | — |
users | A user (employee) in the Ramp organization. | Full refresh | — | — |
cards | A physical or virtual Ramp card issued to a user. | Full refresh | — | — |
departments | A department defined in the Ramp organization. | Full refresh | — | — |
Sync modes
The transactions table supports incremental syncing using the user_transaction_time field. All other tables use full refresh.
| Table | Sync method | Notes |
|---|---|---|
transactions | Incremental | Uses user_transaction_time as the cursor |
reimbursements | Full refresh | |
users | Full refresh | |
cards | Full refresh | |
departments | Full refresh |
Incremental syncs only fetch records with a user_transaction_time at or after the last synced value. Full refresh syncs reload all data on each run.
Ramp's API doesn't support an updated_after filter on transactions. This means incremental syncs capture new transactions but miss late state changes on existing ones (e.g., a transaction moving from pending to cleared). If tracking transaction status changes matters to you, run an occasional full refresh sync on the transactions table.
Available tables
| Table | Description |
|---|---|
transactions | Corporate card transactions and spend data |
reimbursements | Employee reimbursement requests and payouts |
users | Ramp users in your organization |
cards | Corporate cards issued to employees |
departments | Department structure within your organization |