> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nekt.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Ramper Pipeline as a data source

> Bring data from the Ramper Pipeline CRM to Nekt.

Ramper Pipeline is the CRM of the Brazilian B2B sales platform Ramper. It organizes companies, contacts, deals and activities across customizable sales funnels, and its API exposes each of those as a readable collection — which is what this connector brings into your Catalog.

<Note>Ramper sells three products under the same brand: **Prospect** (sales engagement and cadences), **Marketing**, and **Pipeline** (this CRM). They keep separate databases and exchange records by pushing them to each other, so this connector reads Pipeline only. Ramper Prospect does not expose a read API, so cadence, email and engagement data cannot be extracted from it.</Note>

## Configuring Ramper Pipeline as a Source

In the [Sources](https://app.nekt.ai/sources) tab, click on the "Add source" button located on the top right of your screen. Then, select the Ramper Pipeline option from the list of connectors.

Click **Next** and you'll be prompted to add your access.

### 1. Add account access

Ramper Pipeline authenticates every request with a single API token that does not expire.

* **API Token**: In Ramper Pipeline, click your **avatar** in the top right corner, open **API**, and copy the token shown there.

<Warning>Generating a new token in Ramper invalidates the previous one. Every integration already using the old token — your ERP, an automation tool, or this connector — stops working until it is updated. If other tools already read from Ramper, copy the existing token rather than creating another one.</Warning>

The following optional and advanced settings are also available:

* **Initial sync date** (Advanced): The earliest record modification date to read on the first sync. Later runs continue from where the previous one stopped. Leave it empty to read your full history. The funnel, stage, task type, user and custom field tables ignore this setting and are always read in full.

* **Lookback window** (Advanced): (Default: 1 day) How many days before the last sync the incremental tables re-read on every run, so a record edited while the previous sync was running is not missed. Set 0 to disable.

* **Page size** (Advanced): (Default: 100) Records requested per page. Ramper does not publish a maximum.

* **Requests per minute** (Advanced): (Default: 120) How fast this source is allowed to call the API. Ramper does not publish a rate limit for this API, so the connector holds a modest pace of its own. Raise it if syncs are slow and you see no rate-limit warnings. Set 0 to remove the limit.

* **Base URL** (Advanced): Only needed if Ramper told you to use a different address for your account.

Once you're done, click **Next**.

### 2. Select streams

Choose which data streams you want to sync.

> Tip: The stream can be found more easily by typing its name.

Select the streams and click **Next**.

### 3. Configure data streams

Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.

* **Layer**: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
* **Folder**: a folder can be created inside the selected layer to group all tables being created from this new data source.
* **Table name**: we suggest a name, but feel free to customize it. You have the option to add a **prefix** to all tables at once and make this process faster!
* **Sync Type**: you can choose between INCREMENTAL and FULL\_TABLE.
  * Incremental: every time the extraction happens, we'll get only the new data - which is good if, for example, you want to keep every record ever fetched.
  * Full table: every time the extraction happens, we'll get the current state of the data - which is good if, for example, you don't want to have deleted data in your catalog.

Once you are done configuring, click **Next**.

### 4. Configure data source

Describe your data source for easy identification within your organization, not exceeding 140 characters.

To define your [Trigger](https://docs.nekt.com/runs/scheduling-and-triggers), consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times).

Optionally, you can define some additional settings:

* Configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource [here](https://docs.nekt.com/get-started/core-concepts/resource-control).
* Determine when to execute an **Additional [Full Sync](https://docs.nekt.com/get-started/core-concepts/types-of-sync#additional-full-sync)**. This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while.

Once you are ready, click **Next** to finalize the setup.

### 5. Check your new source

You can view your new source on the [Sources](https://app.nekt.ai/sources) page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.

<Warning>For you to be able to see it on your [Catalog](https://app.nekt.ai/catalog), you need at least one successful source run.</Warning>

# Streams and Fields

## Available streams

| Stream        | Slug                | Sync        | Replication key |
| ------------- | ------------------- | ----------- | --------------- |
| Opportunities | `opportunities`     | INCREMENTAL | `updatedAt`     |
| Companies     | `companies`         | INCREMENTAL | `updatedAt`     |
| Contacts      | `persons`           | INCREMENTAL | `updatedAt`     |
| Tasks         | `tasks`             | INCREMENTAL | `updatedAt`     |
| Products      | `products`          | INCREMENTAL | `updatedAt`     |
| Funnels       | `pipes`             | FULL\_TABLE | —               |
| Funnel Stages | `stages`            | FULL\_TABLE | —               |
| Task Types    | `tasks_types`       | FULL\_TABLE | —               |
| Users         | `users`             | FULL\_TABLE | —               |
| Custom Fields | `additional_fields` | FULL\_TABLE | —               |

<Note>The five configuration tables are always read in full. A funnel, stage, task type or custom field you delete in Ramper has to disappear from your Catalog too, and an incremental read would leave it behind forever. `users` has no modification date in the API at all.</Note>

## Fields by stream

<AccordionGroup>
  <Accordion title="Opportunities">
    | Field                 | Type     | Description                                                                                                                                           |
    | --------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
    | `id`                  | string   | Unique identifier of the opportunity. Key of this table.                                                                                              |
    | `name`                | string   | Title of the opportunity.                                                                                                                             |
    | `status`              | string   | Current state of the deal: open, won or lost.                                                                                                         |
    | `value`               | number   | Monetary value of the opportunity, in the account's currency.                                                                                         |
    | `temperature`         | number   | Likelihood of winning the deal, as a percentage. Ramper allows only 5, 25, 50, 75 or 90.                                                              |
    | `closingDate`         | datetime | Date the deal is expected to close.                                                                                                                   |
    | `stageId`             | string   | Identifier of the funnel stage the opportunity currently sits in.                                                                                     |
    | `stage_name`          | string   | Name of the current stage.                                                                                                                            |
    | `stage_order`         | number   | Position of the current stage within its funnel.                                                                                                      |
    | `stage_active`        | boolean  | Whether the current stage is still active in the funnel.                                                                                              |
    | `pipe_id`             | string   | Identifier of the funnel the opportunity belongs to. Lifted from the embedded stage, because the opportunity payload carries no funnel id of its own. |
    | `pipe_name`           | string   | Name of the funnel.                                                                                                                                   |
    | `stageEnteredAt`      | datetime | When the opportunity entered the stage it is in now. Useful for measuring time in stage.                                                              |
    | `lastTouchedByUser`   | datetime | When a user last interacted with the opportunity.                                                                                                     |
    | `openTasks`           | integer  | Number of tasks still open on the opportunity.                                                                                                        |
    | `overdueTasks`        | integer  | Number of unfinished tasks whose due date has passed.                                                                                                 |
    | `companyId`           | string   | Identifier of the company the opportunity belongs to. Join to the companies table.                                                                    |
    | `personId`            | string   | Identifier of the contact associated with the opportunity. Join to the persons table.                                                                 |
    | `mainPersonId`        | string   | Identifier of the primary contact for the opportunity.                                                                                                |
    | `lossReasonId`        | string   | Identifier of the registered reason the deal was lost.                                                                                                |
    | `loss_reason`         | string   | Text of the reason the deal was lost.                                                                                                                 |
    | `owner_id`            | string   | Identifier of the user responsible for the opportunity. Join to the users table.                                                                      |
    | `owner_displayName`   | string   | Display name of the user responsible for the opportunity.                                                                                             |
    | `owner_email`         | string   | Email address of the user responsible for the opportunity.                                                                                            |
    | `company`             | string   | Company associated with the opportunity (JSON object).                                                                                                |
    | `person`              | string   | Contact associated with the opportunity (JSON object).                                                                                                |
    | `mainPerson`          | string   | Primary contact of the opportunity (JSON object).                                                                                                     |
    | `createdBy`           | string   | User who created the opportunity (JSON object).                                                                                                       |
    | `additionalFields`    | string   | Values of your account's custom fields for this opportunity (JSON array). Use the additional\_fields table to resolve the identifiers into names.     |
    | `opportunityProducts` | string   | Products attached to the opportunity, each with quantity, discount and total (JSON array of objects).                                                 |
    | `createdAt`           | datetime | When the opportunity was created.                                                                                                                     |
    | `updatedAt`           | datetime | When the opportunity was last modified. Used as the incremental replication key.                                                                      |
  </Accordion>

  <Accordion title="Companies">
    | Field               | Type     | Description                                                                                                 |
    | ------------------- | -------- | ----------------------------------------------------------------------------------------------------------- |
    | `id`                | string   | Unique identifier of the company. Key of this table.                                                        |
    | `name`              | string   | Registered name of the company.                                                                             |
    | `document`          | string   | Tax registration number of the company (CNPJ or CPF).                                                       |
    | `ddi`               | string   | International dialling code of the phone.                                                                   |
    | `phone`             | string   | Phone number of the company.                                                                                |
    | `zipcode`           | string   | Postal code of the address.                                                                                 |
    | `city`              | string   | City of the address.                                                                                        |
    | `state`             | string   | State of the address.                                                                                       |
    | `address`           | string   | Street of the address.                                                                                      |
    | `number`            | string   | Street number of the address.                                                                               |
    | `addressComplement` | string   | Additional address detail, such as a suite or floor.                                                        |
    | `owner_id`          | string   | Identifier of the user responsible for the company.                                                         |
    | `owner_displayName` | string   | Display name of the user responsible for the company.                                                       |
    | `owner_email`       | string   | Email address of the user responsible for the company.                                                      |
    | `createdBy`         | string   | User who created the company (JSON object).                                                                 |
    | `persons`           | string   | Contacts linked to this company (JSON array). The same contacts are available as rows in the persons table. |
    | `additionalFields`  | string   | Values of your account's custom fields for this company (JSON array).                                       |
    | `createdAt`         | datetime | When the company was created.                                                                               |
    | `updatedAt`         | datetime | When the company was last modified. Used as the incremental replication key.                                |
  </Accordion>

  <Accordion title="Contacts">
    | Field               | Type     | Description                                                                  |
    | ------------------- | -------- | ---------------------------------------------------------------------------- |
    | `id`                | string   | Unique identifier of the contact. Key of this table.                         |
    | `name`              | string   | Full name of the contact.                                                    |
    | `email`             | string   | Email address of the contact.                                                |
    | `document`          | string   | Tax registration number of the contact (CPF or CNPJ).                        |
    | `ddi`               | string   | International dialling code of the phone.                                    |
    | `phone`             | string   | Phone number of the contact.                                                 |
    | `zipcode`           | string   | Postal code of the address.                                                  |
    | `city`              | string   | City of the address.                                                         |
    | `state`             | string   | State of the address.                                                        |
    | `address`           | string   | Street of the address.                                                       |
    | `number`            | string   | Street number of the address.                                                |
    | `addressComplement` | string   | Additional address detail, such as a suite or floor.                         |
    | `companyId`         | string   | Identifier of the company the contact belongs to.                            |
    | `company_name`      | string   | Name of the company the contact belongs to.                                  |
    | `owner_id`          | string   | Identifier of the user responsible for the contact.                          |
    | `owner_displayName` | string   | Display name of the user responsible for the contact.                        |
    | `owner_email`       | string   | Email address of the user responsible for the contact.                       |
    | `createdBy`         | string   | User who created the contact (JSON object).                                  |
    | `additionalFields`  | string   | Values of your account's custom fields for this contact (JSON array).        |
    | `createdAt`         | datetime | When the contact was created.                                                |
    | `updatedAt`         | datetime | When the contact was last modified. Used as the incremental replication key. |
  </Accordion>

  <Accordion title="Tasks">
    | Field               | Type     | Description                                                               |
    | ------------------- | -------- | ------------------------------------------------------------------------- |
    | `id`                | string   | Unique identifier of the task. Key of this table.                         |
    | `taskTypeId`        | string   | Identifier of the task type. Join to the tasks\_types table for its name. |
    | `concluded`         | boolean  | Whether the task has been marked as completed.                            |
    | `scheduledAt`       | datetime | When the task is scheduled to happen.                                     |
    | `duration`          | number   | Planned duration in minutes.                                              |
    | `description`       | string   | Free-text notes on the task.                                              |
    | `opportunityId`     | string   | Identifier of the opportunity the task belongs to.                        |
    | `companyId`         | string   | Identifier of the company the task belongs to.                            |
    | `personId`          | string   | Identifier of the contact the task belongs to.                            |
    | `opportunity`       | string   | Opportunity the task belongs to (JSON object).                            |
    | `company`           | string   | Company the task belongs to (JSON object).                                |
    | `person`            | string   | Contact the task belongs to (JSON object).                                |
    | `owner_id`          | string   | Identifier of the user the task is assigned to.                           |
    | `owner_displayName` | string   | Display name of the user the task is assigned to.                         |
    | `createdAt`         | datetime | When the task was created.                                                |
    | `updatedAt`         | datetime | When the task was last modified. Used as the incremental replication key. |
  </Accordion>

  <Accordion title="Products">
    | Field          | Type     | Description                                                                  |
    | -------------- | -------- | ---------------------------------------------------------------------------- |
    | `id`           | string   | Unique identifier of the product. Key of this table.                         |
    | `name`         | string   | Name of the product.                                                         |
    | `description`  | string   | Description of the product.                                                  |
    | `baseValue`    | number   | Cost the selling price is calculated from.                                   |
    | `margin`       | number   | Margin applied over the base value, as a percentage.                         |
    | `value`        | number   | Selling price of the product.                                                |
    | `externalCode` | string   | Identifier of this product in your own systems.                              |
    | `checkoutUrl`  | string   | Checkout link offered for the product.                                       |
    | `active`       | boolean  | Whether the product can still be added to opportunities.                     |
    | `createdAt`    | datetime | When the product was created.                                                |
    | `updatedAt`    | datetime | When the product was last modified. Used as the incremental replication key. |
  </Accordion>

  <Accordion title="Funnels">
    | Field       | Type     | Description                                                                                |
    | ----------- | -------- | ------------------------------------------------------------------------------------------ |
    | `id`        | string   | Unique identifier of the funnel. Key of this table.                                        |
    | `name`      | string   | Name of the funnel.                                                                        |
    | `active`    | boolean  | Whether the funnel is still in use. Archived funnels are inactive and are still extracted. |
    | `createdAt` | datetime | When the funnel was created.                                                               |
    | `updatedAt` | datetime | When the funnel was last modified.                                                         |
  </Accordion>

  <Accordion title="Funnel Stages">
    | Field       | Type     | Description                                                                              |
    | ----------- | -------- | ---------------------------------------------------------------------------------------- |
    | `id`        | string   | Unique identifier of the stage. Key of this table.                                       |
    | `pipeId`    | string   | Identifier of the funnel this stage belongs to.                                          |
    | `name`      | string   | Name of the stage.                                                                       |
    | `order`     | number   | Position of the stage within its funnel.                                                 |
    | `color`     | string   | Colour the stage is shown in.                                                            |
    | `icon`      | string   | Icon the stage is shown with.                                                            |
    | `active`    | boolean  | Whether the stage is still in use. Archived stages are inactive and are still extracted. |
    | `createdAt` | datetime | When the stage was created.                                                              |
    | `updatedAt` | datetime | When the stage was last modified.                                                        |
  </Accordion>

  <Accordion title="Task Types">
    | Field       | Type     | Description                                            |
    | ----------- | -------- | ------------------------------------------------------ |
    | `id`        | string   | Unique identifier of the task type. Key of this table. |
    | `name`      | string   | Name of the task type, such as Call or Meeting.        |
    | `icon`      | string   | Icon the task type is shown with.                      |
    | `order`     | number   | Position in the task type list.                        |
    | `duration`  | number   | Default duration of a task of this type, in minutes.   |
    | `createdAt` | datetime | When the task type was created.                        |
    | `updatedAt` | datetime | When the task type was last modified.                  |
  </Accordion>

  <Accordion title="Users">
    | Field                      | Type     | Description                                                                      |
    | -------------------------- | -------- | -------------------------------------------------------------------------------- |
    | `id`                       | string   | Unique identifier of the user. Key of this table.                                |
    | `name`                     | string   | Full name of the user.                                                           |
    | `socialName`               | string   | Preferred name of the user.                                                      |
    | `email`                    | string   | Login email address of the user.                                                 |
    | `document`                 | string   | Tax registration number of the user (CPF).                                       |
    | `ddi`                      | string   | International dialling code of the phone.                                        |
    | `phone`                    | string   | Phone number of the user.                                                        |
    | `avatar`                   | string   | URL of the user's profile picture.                                               |
    | `emailSignature`           | string   | Signature appended to emails sent by the user.                                   |
    | `linkedinUrl`              | string   | LinkedIn profile of the user.                                                    |
    | `facebookUrl`              | string   | Facebook profile of the user.                                                    |
    | `role`                     | string   | Job title or role of the user.                                                   |
    | `active`                   | boolean  | Whether the user can still sign in to the account.                               |
    | `admin`                    | boolean  | Whether the user administers the account.                                        |
    | `teamId`                   | string   | Identifier of the team the user belongs to.                                      |
    | `team_id`                  | string   | Identifier of the team the user belongs to, taken from the embedded team record. |
    | `team_name`                | string   | Name of the team the user belongs to.                                            |
    | `lastLogin`                | datetime | When the user last signed in.                                                    |
    | `theme`                    | string   | Interface theme the user selected.                                               |
    | `hasPassword`              | boolean  | Whether the user has a password set, as opposed to signing in federated.         |
    | `mfaEnabled`               | boolean  | Whether multi-factor authentication is enabled for the user.                     |
    | `recoveryEmail`            | string   | Secondary email address used to recover the account.                             |
    | `pushNotifications`        | boolean  | Whether the user receives push notifications.                                    |
    | `emailNotifications`       | boolean  | Whether the user receives email notifications.                                   |
    | `opportunityNotifications` | boolean  | Whether the user is notified about opportunity activity.                         |
    | `taskNotifications`        | boolean  | Whether the user is notified about task activity.                                |
    | `weeklyNewsletter`         | boolean  | Whether the user receives the weekly newsletter.                                 |
    | `productUpdates`           | boolean  | Whether the user receives product update emails.                                 |
    | `promotionalEmails`        | boolean  | Whether the user receives promotional emails.                                    |
    | `systemNotifications`      | boolean  | Whether the user receives system notifications.                                  |
    | `createdAt`                | datetime | When the user was created.                                                       |
  </Accordion>

  <Accordion title="Custom Fields">
    | Field            | Type     | Description                                                                                                                                   |
    | ---------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
    | `id`             | string   | Unique identifier of the custom field. Key of this table, and the identifier that appears inside the additionalFields column of other tables. |
    | `relatedEntity`  | string   | Which record type the field belongs to: opportunity, company or person.                                                                       |
    | `name`           | string   | Label of the custom field.                                                                                                                    |
    | `type`           | string   | Kind of input the field accepts, such as TEXT, SELECT or CHECKLIST.                                                                           |
    | `order`          | number   | Position in the custom field list.                                                                                                            |
    | `options`        | string   | Choices offered by SELECT and CHECKLIST fields (JSON array).                                                                                  |
    | `defaultValue`   | string   | Value the field starts with when a record is created.                                                                                         |
    | `required`       | boolean  | Whether the field must be filled in.                                                                                                          |
    | `active`         | boolean  | Whether the field is still offered on records.                                                                                                |
    | `requiredStages` | string   | Funnel stages where the field is mandatory, for opportunity fields (JSON array of objects).                                                   |
    | `visibleStages`  | string   | Funnel stages where the field is shown, for opportunity fields (JSON array of objects).                                                       |
    | `createdAt`      | datetime | When the custom field was created.                                                                                                            |
    | `updatedAt`      | datetime | When the custom field was last modified.                                                                                                      |
  </Accordion>
</AccordionGroup>

# Data Model

The following diagram shows how the tables relate. Opportunities sit at the centre: each one belongs to a stage of a funnel, points at a company and a contact, and collects tasks.

```mermaid theme={null}
graph TD;
    Opportunities("Opportunities")
    Companies("Companies")
    Contacts("Contacts")
    Tasks("Tasks")
    Funnels("Funnels")
    Stages("Funnel Stages")
    Users("Users")

    Opportunities -- "companyId" --> Companies
    Opportunities -- "personId" --> Contacts
    Opportunities -- "stageId" --> Stages
    Opportunities -- "pipe_id" --> Funnels
    Opportunities -- "owner_id" --> Users
    Contacts -- "companyId" --> Companies
    Stages -- "pipeId" --> Funnels
    Tasks -- "opportunityId" --> Opportunities
```

* `opportunities` — one row per deal, with its value, status, stage and funnel.
* `companies` and `persons` — the organizations and people the deals belong to.
* `pipes` and `stages` — how your funnels are configured. Join `opportunities.stageId` to `stages.id`, or use `pipe_id` on the opportunity directly.
* `tasks` — activities scheduled against an opportunity, company or contact.
* `users` — who owns each record. Every table carries `owner_id`.
* `additional_fields` — the definitions behind the `additionalFields` column on opportunities, companies and contacts.

# Implementation Notes

### Archived funnels and stages are included

Ramper's API returns only **active** funnels and stages by default. This connector asks for both active and inactive ones, so an archived funnel still appears in your Catalog with `active` set to false.

This matters for reporting: an opportunity you closed a year ago still points at the stage it was in, and if that stage has since been archived, leaving it out would make those opportunities impossible to label. Filter on `active` yourself when you want only the funnels currently in use.

### Things to know

* **Opportunities carry their funnel directly.** The API identifies only the stage on an opportunity, but the connector resolves the funnel and writes it to `pipe_id` and `pipe_name`, so you can group by funnel without joining the stages table.

* **Custom field values are stored as JSON.** The `additionalFields` column on opportunities, companies and contacts holds the values as the API returned them. Join their identifiers against the `additional_fields` table to get names, types and option lists.

* **Nested records are stored as JSON text.** Columns such as `company`, `person`, `opportunityProducts` and `createdBy` hold the API's object exactly as it arrived. This keeps your table structure stable as Ramper evolves its API. The information you are most likely to query — the record's owner, its stage, its funnel — is already available as regular columns.

* **Configuration tables are small and re-read on every run.** Funnels, stages, task types, users and custom fields are refreshed in full each sync, which costs a request or two and keeps deletions in step.

* **Ramper publishes no rate limit for this API.** The connector paces itself instead. If a sync is slow and you see no rate-limit warnings in the run log, raise **Requests per minute** in the source settings.

* **Ramper Prospect data is not available here.** Cadences, email sends, opens, clicks and replies live in Ramper Prospect, which exposes no read API. Only leads that Prospect pushes into Pipeline reach this connector, as ordinary opportunities and contacts.

### Troubleshooting

| Issue                                                | Possible cause                                          | Solution                                                                                                                                                                                                                  |
| :--------------------------------------------------- | :------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Authentication errors (401 Unauthorized)             | The API token is wrong, or it was regenerated in Ramper | Open Ramper Pipeline, click your avatar, go to **API**, and copy the token into the source settings. Remember that generating a new token in Ramper invalidates the previous one for every integration that was using it. |
| A funnel or stage is missing from the Catalog        | The source has not run since it was created in Ramper   | Funnels and stages are refreshed on every run, including archived ones. Trigger the source again.                                                                                                                         |
| Custom field values look like unreadable identifiers | The `additional_fields` stream is not selected          | Select it and re-run the source; it maps each identifier to the field's name and type.                                                                                                                                    |

## Skills for agents

<Snippet file="agent-skills-intro.mdx" />

<Card title="Download Ramper Pipeline skills file" icon="wand-magic-sparkles" href="/sources/ramper-pipeline.md">
  Ramper Pipeline connector documentation as plain markdown, for use in AI agent contexts.
</Card>
