> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt # Linking Cloudinary as a source ![](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 **Alpha release** This source is currently in **alpha**. The interface and available tables may change. The Cloudinary connector syncs your media library metadata into the PostHog data warehouse: images, videos, raw files, folders, transformations, and upload presets. Media files themselves are never downloaded. ## Prerequisites A Cloudinary account, and the cloud name, API key, and API secret from its console. Read access is enough. ## Adding a data source 1. In PostHog, go to the [Sources tab](https://app.posthog.com/data-management/sources) of the data pipeline section. 2. Click **\+ New source** and click **Link** next to this source. 3. Enter your credentials (see [Configuration](#configuration) below) and click **Next**. 4. Select the tables you want to sync, choose a sync method and frequency, then click **Import**. Once the syncs are complete, you can start querying this data in PostHog. Find all three values in your Cloudinary console under Settings, then API Keys. You'll be asked for: - **Cloud name**: shown at the top of your Cloudinary console. - **API key** and **API secret**: from the API Keys page. - **Region**: match the API host your account uses. Most accounts are on the global host. ## Sync modes Each table can be synced in one of several modes, depending on what the source supports: - **Webhook** (when available) – the source pushes changes to PostHog in real time. Fastest freshness, lowest ongoing cost, and the only mode that reliably captures updates and deletes. - **Incremental** – only new or updated rows are synced on each run, using a cursor field (such as an `updated_at` timestamp). Cheaper than a full refresh, but deletes aren't captured. - **Append only** – new rows are appended using a cursor field; existing rows are never updated. Ideal for immutable, append-only tables like event logs. - **Full refresh** – the whole table is reloaded on every sync. Use it when a table has no reliable cursor or when you need deletions reflected. See [sync methods](/docs/cdp/sources.md#sync-methods) for a full explanation of how each mode works and how to choose between them. All Cloudinary tables are full refresh. Cloudinary's only time filter on the asset lists selects on update time while the list is ordered by creation time, so a watermark built on it would skip rows. Cloudinary limits Admin API calls per hour, 500 on free plans, so a first sync of a large media library can take a while. PostHog requests the largest page Cloudinary allows to keep the call count down. ## Configuration | Option | Description | | --- | --- | | `Cloud name` **Type:** text **Required:** True | Shown at the top of your Cloudinary console. | | `API key` **Type:** text **Required:** True | | | `API secret` **Type:** password **Required:** True | | | `Region` **Type:** select **Required:** True | | ## Supported tables | Table | Description | Sync method | Incremental field | Primary key | | --- | --- | --- | --- | --- | | `images` | An image in the Cloudinary media library, with its delivery URLs, size, and metadata. | Full refresh | — | — | | `videos` | A video in the Cloudinary media library, with its delivery URLs, size, and metadata. | Full refresh | — | — | | `raw_files` | A raw file in the Cloudinary media library, meaning one stored without image or video processing. | Full refresh | — | — | | `folders` | A folder in the Cloudinary media library. | Full refresh | — | — | | `transformations` | A stored transformation, meaning a named recipe Cloudinary applies when delivering an asset. | Full refresh | — | — | | `upload_presets` | An upload preset, meaning a saved set of upload options that clients can apply by name. | Full refresh | — | — | ## Troubleshooting - If the connection fails with an authorization error, check the API key and secret in your Cloudinary console under Settings, then API Keys. - If Cloudinary does not recognize the cloud name, copy it from the top of the console rather than from a delivery URL. - If a sync stops partway, the account may have hit its hourly Admin API limit. The sync picks up where it left off on the next run. If your sync is failing or data looks wrong, see the [Data warehouse troubleshooting guide](/docs/data-warehouse/troubleshooting.md). If that doesn't help, [contact support](https://us.posthog.com/#panel=support%3Asupport%3Adata_warehouse%3A%3Atrue) – we're happy to help. ### Still have questions? Ask PostHog AI ### Was this page useful? HelpfulCould be better