> For the complete documentation index, see [llms.txt](https://docs.erathos.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.erathos.com/connectors/apis/rd-station-crm-v2.md).

# RD Station CRM v2

Connect your RD Station CRM v2 to your data warehouse. Sync contacts, deals, organizations, products, tasks, meetings, and pipeline data to BigQuery, Redshift, Postgres, Databricks, and more.

## Using the Erathos platform

When selecting RD Station CRM v2 as a new connector on the Erathos platform, you will need to name your connection and fill in the following form:

* **Client ID** — the public identifier of your RD Station app, used to start the OAuth authorization flow
* **Client Secret** — the secret key of your RD Station app, used together with the Client ID to exchange the authorization code for tokens
* **OAuth** — the OAuth2 connection you authorize with your RD Station account; Erathos automatically obtains and renews the access and refresh tokens

With this connection created you can seamlessly move your RD Station CRM v2 data to your BigQuery, Redshift or Postgres data warehouse.

### How to find my token?

RD Station CRM v2 uses the OAuth2 authorization code flow. First, create an app in the [RD Station developer portal](https://developers.rdstation.com/) and register a redirect URI. The app's details page will show your **Client ID** and **Client Secret** — copy both values into the corresponding fields on the Erathos platform.

Next, click the OAuth field to start the authorization flow. You will be redirected to RD Station's consent screen; log in with your RD Station account and approve the requested permissions. Erathos stores the resulting tokens and automatically renews them — access tokens last 2 hours and are refreshed on demand, so no manual token management is required.

Click **Save and close** to complete the setup.

## Endpoints and fields

### campaigns

Sync type availability: Full-refresh

| Field | Type |
| ----- | ---- |
| id    | text |
| name  | text |

### contacts

Sync type availability: Full and incremental refresh

[Cursor](https://docs.erathos.com/platform/connections/sync-types#understanding-cursors): `updated_at`

| Field            | Type      | Cursor |
| ---------------- | --------- | ------ |
| id               | text      |        |
| name             | text      |        |
| email            | text      |        |
| phone            | text      |        |
| mobile           | text      |        |
| title            | text      |        |
| website          | text      |        |
| linkedin         | text      |        |
| street           | text      |        |
| city             | text      |        |
| state            | text      |        |
| country          | text      |        |
| postal\_code     | text      |        |
| organization\_id | text      |        |
| owner\_id        | text      |        |
| custom\_fields   | json      |        |
| created\_at      | timestamp |        |
| updated\_at      | timestamp | ✓      |

### custom\_fields

Sync type availability: Full-refresh

| Field       | Type      |
| ----------- | --------- |
| id          | text      |
| slug        | text      |
| label       | text      |
| type        | text      |
| entity      | text      |
| required    | boolean   |
| unique      | boolean   |
| opts        | json      |
| created\_at | timestamp |
| updated\_at | timestamp |

### deal\_files

Sync type availability: Full-refresh

Child of [deals](#deals)

| Field       | Type      |
| ----------- | --------- |
| id          | text      |
| name        | text      |
| url         | text      |
| created\_at | timestamp |
| updated\_at | timestamp |

### deal\_notes

Sync type availability: Full and incremental refresh

[Cursor](https://docs.erathos.com/platform/connections/sync-types#understanding-cursors): `updated_at`

Child of [deals](#deals)

| Field          | Type      | Cursor |
| -------------- | --------- | ------ |
| id             | text      |        |
| content        | text      |        |
| user\_id       | text      |        |
| registered\_at | timestamp |        |
| created\_at    | timestamp |        |
| updated\_at    | timestamp | ✓      |

### deal\_products

Sync type availability: Full-refresh

Child of [deals](#deals)

| Field       | Type      |
| ----------- | --------- |
| id          | text      |
| product\_id | text      |
| amount      | float     |
| discount    | float     |
| quantity    | integer   |
| created\_at | timestamp |
| updated\_at | timestamp |

### deal\_proposals

Sync type availability: Full and incremental refresh

[Cursor](https://docs.erathos.com/platform/connections/sync-types#understanding-cursors): `updated_at`

Child of [deals](#deals)

| Field       | Type      | Cursor |
| ----------- | --------- | ------ |
| id          | text      |        |
| name        | text      |        |
| status      | text      |        |
| url         | text      |        |
| created\_at | timestamp |        |
| updated\_at | timestamp | ✓      |

### deals

Sync type availability: Full and incremental refresh

[Cursor](https://docs.erathos.com/platform/connections/sync-types#understanding-cursors): `updated_at`

Parent of [deal\_files](#deal_files), [deal\_notes](#deal_notes), [deal\_products](#deal_products), [deal\_proposals](#deal_proposals)

| Field                | Type      | Cursor |
| -------------------- | --------- | ------ |
| id                   | text      |        |
| name                 | text      |        |
| amount               | float     |        |
| status               | text      |        |
| rating               | integer   |        |
| stage\_id            | text      |        |
| organization\_id     | text      |        |
| contact\_id          | text      |        |
| owner\_id            | text      |        |
| campaign\_id         | text      |        |
| source\_id           | text      |        |
| loss\_reason\_id     | text      |        |
| closed\_at           | timestamp |        |
| deal\_custom\_fields | json      |        |
| created\_at          | timestamp |        |
| updated\_at          | timestamp | ✓      |

### lost\_reasons

Sync type availability: Full-refresh

| Field | Type |
| ----- | ---- |
| id    | text |
| name  | text |

### meeting\_availabilities

Sync type availability: Full-refresh

| Field          | Type |
| -------------- | ---- |
| id             | text |
| user\_id       | text |
| timezone       | text |
| week\_schedule | json |

### meetings

Sync type availability: Full and incremental refresh

[Cursor](https://docs.erathos.com/platform/connections/sync-types#understanding-cursors): `updated_at`

| Field       | Type      | Cursor |
| ----------- | --------- | ------ |
| id          | text      |        |
| title       | text      |        |
| status      | text      |        |
| starts\_at  | timestamp |        |
| ends\_at    | timestamp |        |
| user\_id    | text      |        |
| contact\_id | text      |        |
| deal\_id    | text      |        |
| created\_at | timestamp |        |
| updated\_at | timestamp | ✓      |

### organizations

Sync type availability: Full and incremental refresh

[Cursor](https://docs.erathos.com/platform/connections/sync-types#understanding-cursors): `updated_at`

| Field          | Type      | Cursor |
| -------------- | --------- | ------ |
| id             | text      |        |
| name           | text      |        |
| custom\_fields | json      |        |
| created\_at    | timestamp |        |
| updated\_at    | timestamp | ✓      |

### pipelines

Sync type availability: Full-refresh

Parent of [stages](#stages)

| Field | Type |
| ----- | ---- |
| id    | text |
| name  | text |

### products

Sync type availability: Full-refresh

| Field              | Type      |
| ------------------ | --------- |
| id                 | text      |
| name               | text      |
| amount             | float     |
| billing\_frequency | text      |
| custom\_fields     | json      |
| created\_at        | timestamp |
| updated\_at        | timestamp |

### segments

Sync type availability: Full-refresh

| Field | Type |
| ----- | ---- |
| id    | text |
| name  | text |

### sources

Sync type availability: Full-refresh

| Field | Type |
| ----- | ---- |
| id    | text |
| name  | text |

### stages

Sync type availability: Full-refresh

Child of [pipelines](#pipelines)

| Field    | Type    |
| -------- | ------- |
| id       | text    |
| name     | text    |
| position | integer |

### tasks

Sync type availability: Full and incremental refresh

[Cursor](https://docs.erathos.com/platform/connections/sync-types#understanding-cursors): `updated_at`

| Field         | Type      | Cursor |
| ------------- | --------- | ------ |
| id            | text      |        |
| type          | text      |        |
| description   | text      |        |
| status        | text      |        |
| due\_date     | timestamp |        |
| completed\_at | timestamp |        |
| deal\_id      | text      |        |
| user\_id      | text      |        |
| created\_at   | timestamp |        |
| updated\_at   | timestamp | ✓      |

### teams

Sync type availability: Full-refresh

| Field | Type |
| ----- | ---- |
| id    | text |
| name  | text |

### users

Sync type availability: Full-refresh

| Field       | Type      |
| ----------- | --------- |
| id          | text      |
| name        | text      |
| email       | text      |
| created\_at | timestamp |
| updated\_at | timestamp |

## Entity Relationships

```mermaid
erDiagram
    deals ||--o{ deal_files : "id = deal_id"
    deals ||--o{ deal_notes : "id = deal_id"
    deals ||--o{ deal_products : "id = deal_id"
    deals ||--o{ deal_proposals : "id = deal_id"
    pipelines ||--o{ stages : "id = pipeline_id"

    users ||--o{ contacts : "id = owner_id"
    organizations ||--o{ contacts : "id = organization_id"
    users ||--o{ deals : "id = owner_id"
    organizations ||--o{ deals : "id = organization_id"
    contacts ||--o{ deals : "id = contact_id"
    stages ||--o{ deals : "id = stage_id"
    campaigns ||--o{ deals : "id = campaign_id"
    sources ||--o{ deals : "id = source_id"
    lost_reasons ||--o{ deals : "id = loss_reason_id"
    users ||--o{ deal_notes : "id = user_id"
    products ||--o{ deal_products : "id = product_id"
    users ||--o{ meeting_availabilities : "id = user_id"
    users ||--o{ meetings : "id = user_id"
    contacts ||--o{ meetings : "id = contact_id"
    deals ||--o{ meetings : "id = deal_id"
    deals ||--o{ tasks : "id = deal_id"
    users ||--o{ tasks : "id = user_id"

    users { text id PK }
    organizations { text id PK }
    contacts { text id PK }
    deals { text id PK }
    deal_files { text id PK }
    deal_notes { text id PK }
    deal_products { text id PK }
    deal_proposals { text id PK }
    pipelines { text id PK }
    stages { text id PK }
    campaigns { text id PK }
    sources { text id PK }
    lost_reasons { text id PK }
    products { text id PK }
    meetings { text id PK }
    meeting_availabilities { text id PK }
    tasks { text id PK }
    custom_fields { text id PK }
    segments { text id PK }
    teams { text id PK }
```
