> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt # Linking Typeform as a source Canonical URL: https://posthog.com/docs/data-pipelines/sources/typeform > **Cloud region:** This page uses US Cloud hosts. For an EU Cloud project, use `https://eu.posthog.com` instead of `https://app.posthog.com` (app host for links). ## On this page - [Linking Typeform](#linking-typeform) - [Configuration](#configuration) - [Supported tables](#supported-tables) - [Available datasets and endpoints](#available-datasets-and-endpoints) - [Syncing partial and started responses](#syncing-partial-and-started-responses) - [Supported API base URLs](#supported-api-base-urls) ![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_9608fcca70) ![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_dark_a92b0e022d) Let AI connect your sources for you Skip the manual setup — run this in your project and the wizard auto-detects your databases and APIs and connects them to PostHog. `npx @posthog/wizard warehouse` ![PostHog Wizard hedgehog](https://res.cloudinary.com/dmukukwp6/image/upload/wizard_3f8bb7a240.png) ![](https://res.cloudinary.com/dmukukwp6/image/upload/wizard_3f8bb7a240.png)Let AI connect your sources for you The Typeform connector can link data from your Typeform account into PostHog. ## Linking Typeform 1. In Typeform, go to your **Account** settings, navigate to **Personal tokens**, and click **Generate a new token**. 2. Give the token a name and select the required scopes: **Forms: Read** and **Responses: Read**. Copy the token. For more details, see Typeform's [Personal Access Tokens docs](https://www.typeform.com/developers/get-started/personal-access-token/). 3. In PostHog, go to the [Data pipeline sources page](https://app.posthog.com/data-management/sources), click **\+ New source**, and then click **Link** next to Typeform. 4. Paste your **Personal Access Token**. If your account is on the EU region, set the **API base URL** to `https://api.eu.typeform.com` or `https://api.typeform.eu`. 5. Click **Next**, choose the tables you want to sync, and then click **Import**. ## Configuration | Option | Description | | --- | --- | | `Personal access token` **Type:** password **Required:** True | | | `API base URL` **Type:** select **Required:** False | | | `Responses to sync` **Type:** select **Required:** False | Completed responses sync incrementally. Including partial and started responses syncs the whole responses table on every run, since Typeform has no cursor for partial responses. **To apply this change to an existing source, use 'Delete table and resync' on the responses table. 'Sync now' alone won't backfill the responses you're adding.** | ## Supported tables | Table | Description | Sync method | Incremental field | Primary key | | --- | --- | --- | --- | --- | | `forms` | A Typeform form (survey/quiz) with its questions, theme, and settings. | Incremental, Full refresh | last\_updated\_at | — | | `responses` | A single submission to a Typeform form, including the answers given. | Incremental, Full refresh | submitted\_at | — | ## Available datasets and endpoints The Typeform source currently supports syncing the following datasets and API endpoints: | Dataset | Endpoint path | | --- | --- | | `forms` | `/forms` | | `responses` | `/forms/{form_id}/responses` | The `responses` dataset is a dependent (fan-out) endpoint — PostHog fetches all your forms first, then retrieves responses for each form individually. ## Syncing partial and started responses By default, PostHog only syncs **completed** Typeform responses. You can change this using the **Responses to sync** setting when configuring your Typeform source: - **Completed responses only** (default): Syncs only completed form submissions. Uses incremental sync on `submitted_at`. - **All responses (including partial & started)**: Syncs completed, partial, and started responses. Uses a **full refresh** on every sync run. The "All responses" mode uses full refresh because partial and started responses have no `submitted_at` timestamp, and Typeform's API doesn't provide a cursor that works across all three response types. This means incremental sync isn't possible when including partial responses. > **Note:** To apply this change to an existing source, use **Delete table and resync** on the `responses` table. **Sync now** alone won't backfill the responses you're adding. ## Supported API base URLs | Region | API base URL | | --- | --- | | Global (default) | `https://api.typeform.com` | | EU | `https://api.eu.typeform.com` | | EU (alternative) | `https://api.typeform.eu` |