# Monday.com

Monday.com is a work operating system (Work OS) for project management, task tracking, and team collaboration. The Sling Monday.com connector extracts data from Monday.com's GraphQL API, supporting users, teams, tags, workspaces, boards (with columns and groups), items (tasks/rows), updates (comments), and activity logs.

{% hint style="success" %}
**CLI Pro Required**: APIs require a [CLI Pro token](https://docs.slingdata.io/sling-cli/cli-pro) or [Platform Plan](https://docs.slingdata.io/sling-platform/platform).
{% endhint %}

## Setup

The following credentials and inputs are accepted:

**Secrets:**

* `api_key` **(required)** -> Your Monday.com Personal API Token

**Inputs (optional):**

* `anchor_date` -> Starting date for first sync of incremental endpoints (ISO 8601 format, e.g., `2024-01-01T00:00:00Z`). Defaults to 1 year ago.

### Getting Your API Token

1. Log in to [Monday.com](https://monday.com)
2. Click your **avatar** (bottom-left corner)
3. Go to **Developers**
4. Navigate to **My access tokens** in the Developer Center
5. Copy your **Personal API Token**

{% hint style="warning" %}
**Important:** Personal API tokens grant the same access as your user account. Use a dedicated service account with appropriate permissions for production workloads.
{% endhint %}

### Using `sling conns`

{% code overflow="wrap" %}

```bash
sling conns set MONDAY type=api spec=monday secrets='{ api_key: your_api_token_here }'
```

{% endcode %}

### Environment Variable

See [here](https://docs.slingdata.io/sling-cli/environment#dot-env-file-.env.sling) to learn more about the `.env.sling` file.

{% code overflow="wrap" %}

```bash
export MONDAY='{ type: api, spec: monday, secrets: { api_key: "your_api_token_here" } }'
```

{% endcode %}

### Sling Env File YAML

See [here](https://docs.slingdata.io/sling-cli/environment#sling-env-file-env.yaml) to learn more about the sling `env.yaml` file.

```yaml
connections:
  MONDAY:
    type: api
    spec: monday
    secrets:
      api_key: "your_api_token_here"
```

## Replication

Here's an example replication configuration to sync Monday.com data to a PostgreSQL database:

```yaml
source: MONDAY
target: MY_POSTGRES

defaults:
  mode: full-refresh
  object: monday.{stream_name}

streams:
  # sync all endpoints
  '*':
```

**Incremental sync for updates and activity logs:**

```yaml
source: MONDAY
target: MY_POSTGRES

defaults:
  object: monday.{stream_name}

streams:
  users:
    mode: full-refresh

  teams:
    mode: full-refresh

  tags:
    mode: full-refresh

  workspaces:
    mode: full-refresh

  boards:
    mode: full-refresh

  items:
    mode: full-refresh

  updates:
    mode: incremental
    primary_key: [id]
    update_key: updated_at

  activity_logs:
    mode: incremental
    primary_key: [id]
    update_key: created_at
```

## Endpoints

| Endpoint        | Description                                                            | Incremental |
| --------------- | ---------------------------------------------------------------------- | ----------- |
| `users`         | All users in the account with profile details                          | No          |
| `teams`         | All teams with owners and members                                      | No          |
| `tags`          | All tags used across boards                                            | No          |
| `workspaces`    | All workspaces                                                         | No          |
| `boards`        | All boards with columns, groups, owners, subscribers, and tags         | No          |
| `items`         | All items (tasks/rows) from all boards with column values and subitems | No          |
| `updates`       | All updates (comments/activity) with replies and attachments           | Yes         |
| `activity_logs` | Activity logs from all boards                                          | Yes         |

To discover available endpoints:

```bash
sling conns discover MONDAY
```

## Incremental Sync

Two endpoints support incremental sync:

**`updates`** — Fetches updates modified since the last sync:

* **First run:** Fetches all updates from the last year (or since `anchor_date` if provided)
* **Subsequent runs:** Only fetches updates modified after the last sync timestamp

**`activity_logs`** — Fetches activity logs created since the last sync:

* **First run:** Fetches all activity logs from the last year (or since `anchor_date`)
* **Subsequent runs:** Only fetches new activity logs

All other endpoints run in full-refresh mode. Items, boards, and other entities are relatively fast to sync via full-refresh since Monday.com's GraphQL API returns them efficiently.

## How It Works

The Monday.com connector uses Monday.com's [GraphQL API](https://developer.monday.com/api-reference/reference) (API version `2025-01`). A few implementation details:

* **Boards populate a queue** — The `boards` endpoint collects all board IDs into a queue. The `items` and `activity_logs` endpoints then iterate over this queue to fetch data per-board.
* **Items use cursor-based pagination** — Items are fetched using Monday.com's `items_page` with cursor-based pagination for efficient retrieval of large boards.
* **All other endpoints use page-based pagination** — Users, workspaces, updates, and activity logs paginate by page number.

## Rate Limiting

The Monday.com API enforces rate limits based on your plan:

* **Free plan:** 200 API calls per day
* **Pro/Enterprise:** Higher limits (1,000–25,000+ calls per day)

The connector automatically:

* Uses conservative rate limiting (1 request/second)
* Retries with exponential backoff on 429 (rate limit) responses, up to 5 attempts

{% hint style="info" %}
**Tip:** For accounts with many boards and items, a paid plan is recommended to avoid hitting the free plan's daily API call limit during sync.
{% endhint %}

If you are facing issues connecting, please reach out to us at <support@slingdata.io>, on [discord](https://discord.gg/q5xtaSNDvp) or open a Github Issue [here](https://github.com/slingdata-io/sling-cli/issues).
