Skip to main content

Basecamp

This page guides you through configuring the Basecamp source connector to sync project, schedule, to-do, and message data from Basecamp 3 into your destination. The connector uses the Basecamp 3 REST API and authenticates with OAuth 2.0 through 37signals Launchpad.

Prerequisites

  • A Basecamp account on Basecamp 3 (accounts on Basecamp 2 and Basecamp Classic use a different API and aren't supported).
  • Your Basecamp Account ID.
  • A registered OAuth integration on 37signals Launchpad, which provides a Client ID and Client secret.
  • A long-lived OAuth 2.0 Refresh token issued for that integration.

Find your Account ID

Sign in to Basecamp and open any page in your account. The numeric segment immediately after the host in the URL is your account ID. For example, if the URL is https://3.basecamp.com/1234567/projects, your account ID is 1234567. All API requests to Basecamp are scoped to this ID.

Register an OAuth integration

  1. Go to 37signals Launchpad integrations and click New integration.
  2. Enter a name, your company, and a website or contact address. 37signals uses this information to contact integration owners, so provide values you can receive mail at.
  3. For Redirect URI, enter any URL you control. The connector doesn't use this URL, but 37signals requires one. If you don't have one handy, use a placeholder like https://example.com/oauth.
  4. Save the integration. Launchpad displays a Client ID and Client secret. Keep both values safe; you need them for the connector and to complete the OAuth flow.

Obtain a refresh token

The connector refreshes its own access tokens at runtime, but you must supply a refresh token the first time you set up the source. To get one, complete a full OAuth 2.0 authorization code flow against 37signals Launchpad once, using the client ID and secret you just created.

Follow the steps in the Basecamp authentication guide to exchange an authorization code for an access token and refresh token. The relevant endpoints are:

  • Authorization: https://launchpad.37signals.com/authorization/new
  • Token exchange: https://launchpad.37signals.com/authorization/token

Any OAuth 2.0 client library can perform this flow. If you'd prefer a ready-made tool, the community-maintained basecampy3 CLI walks you through the flow and prints the resulting tokens. Record the refresh_token value; that's what Airbyte needs.

Refresh tokens issued by 37signals do not expire unless you revoke the integration, so you can reuse the same value across syncs.

Setup guide

  1. In the Airbyte UI, create a new Basecamp source.
  2. Enter your Account ID.
  3. Enter a Start date in YYYY-MM-DDTHH:MM:SSZ format. Incremental streams only emit records updated on or after this date.
  4. Paste the Client ID, Client secret, and Refresh token you obtained above into the matching fields.
  5. Click Set up source. Airbyte runs a connection check against the projects endpoint to validate your credentials.

Configuration

InputTypeDescriptionDefault Value
account_idnumberYour Basecamp Account ID.
start_datestringStart date used for incremental streams. Records updated before this date aren't synced.
client_idstringOAuth application Client ID from 37signals Launchpad.
client_secretstringOAuth application Client secret.
client_refresh_token_2stringOAuth 2.0 refresh token obtained by completing the Launchpad authorization flow once.

Supported sync modes

The Basecamp source connector supports the following sync modes:

  • Full Refresh | Overwrite
  • Full Refresh | Append
  • Incremental | Append (for streams that expose an updated_at cursor)
  • Incremental | Append + Deduped (for streams that expose an updated_at cursor)

Supported streams

StreamPrimary keyIncrementalNotes
projectsidActive projects (buckets) in the account. Used as the parent stream for schedules.
schedulesidSchedule tools attached to each project.
schedule_entriesidEvents listed in each project's schedule.
todosid✅ (cursor: updated_at)To-do recordings across all projects.
messagesid✅ (cursor: updated_at)Message board posts across all projects.

The todos and messages streams use Basecamp's projects/recordings.json endpoint, which returns records sorted by updated_at in descending order. The connector walks the result set until it reaches the configured start date, then stops — Basecamp doesn't offer a server-side updated_since filter for this endpoint.

Performance considerations

  • Basecamp applies dynamic, multi-dimensional rate limits. The first limit you typically encounter is around 50 requests per 10-second window per IP. The connector retries 429 Too Many Requests responses using the Retry-After header.
  • All requests are scoped to a single account (the connector's url_base is https://3.basecampapi.com/{account_id}/).
  • To sync multiple Basecamp accounts, create one Airbyte source per account.

Reference

Config fields reference

Field
Type
Property name
Account ID
required
number
account_id
Client ID
required
string
client_id
Refresh token
required
string
client_refresh_token_2
Client secret
required
string
client_secret
string
start_date

Changelog

Expand to review
VersionDatePull RequestSubject
0.0.372026-04-2877177Update dependencies
0.0.362026-04-2176843Bump SDM base image to stable 7.17.2
0.0.352026-03-3175947Bump SDM base image for memory monitor (CDK PR #962)
0.0.342026-03-3175892Update dependencies
0.0.332026-03-1775000Update dependencies
0.0.322026-02-2473800Update dependencies
0.0.312026-02-0372685Update dependencies
0.0.302026-01-2071898Update dependencies
0.0.292026-01-1471405Update dependencies
0.0.282025-12-1870811Update dependencies
0.0.272025-11-2569901Update dependencies
0.0.262025-11-1869521Update dependencies
0.0.252025-10-2968904Update dependencies
0.0.242025-10-2168382Update dependencies
0.0.232025-10-1467965Update dependencies
0.0.222025-10-0767162Update dependencies
0.0.212025-09-3066275Update dependencies
0.0.202025-09-0965643Update dependencies
0.0.192025-08-0264408Update dependencies
0.0.182025-07-2663806Update dependencies
0.0.172025-07-1263042Update dependencies
0.0.162025-06-2862136Update dependencies
0.0.152025-06-1561088Update dependencies
0.0.142025-05-2460678Update dependencies
0.0.132025-05-1059871Update dependencies
0.0.122025-05-0359362Update dependencies
0.0.112025-04-2658726Update dependencies
0.0.102025-04-1958254Update dependencies
0.0.92025-04-1257606Update dependencies
0.0.82025-04-0557157Update dependencies
0.0.72025-03-2956608Update dependencies
0.0.62025-03-2256114Update dependencies
0.0.52025-03-0854863Update dependencies
0.0.42025-02-2254222Update dependencies
0.0.32025-02-1547905Update dependencies
0.0.22024-10-0946660Update dependencies
0.0.12024-08-12Initial release by natikgadzhi via Connector Builder