> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt # Linking Holded as a source Canonical URL: https://posthog.com/docs/data-pipelines/sources/holded > **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 - [Adding a data source](#adding-a-data-source) - [Available tables](#available-tables) - [Configuration](#configuration) - [Supported tables](#supported-tables) - [Troubleshooting](#troubleshooting) ![](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 Holded connector syncs invoices, purchases, payments, contacts, products, accounting, CRM, project, and team data from your Holded account into PostHog. ## Adding a data source 1. Go to the [sources tab](https://app.posthog.com/data-management/sources) of the data pipeline section in PostHog. 2. Click **\+ New source** and then click **Link** next to Holded. 3. Next, you need an API key from Holded. In your Holded dashboard, go to **Settings** > **API** and create a new key. Give it read permission for the tables you want to sync, and the `account:info.read` permission so PostHog can verify the key. 4. Back in PostHog, paste the API key into the **API key** field and click **Next**. 5. Select the tables you want to sync, set the sync frequency, then click **Import**. Once the syncs are complete, you can start using Holded data in PostHog. **API quota** Holded plans have a monthly API call quota. Each sync reads every selected table in full and uses calls from your quota, so select only the tables you need. ## Available tables All Holded tables sync via **full table refresh**. The Holded API doesn't filter by modification time, so incremental sync isn't available. ### Sales documents | Table | Description | Sync method | | --- | --- | --- | | `invoices` | Sales invoices | Full refresh | | `credit_notes` | Sales credit notes | Full refresh | | `sales_receipts` | Sales receipts | Full refresh | | `estimates` | Estimates and quotes | Full refresh | | `proformas` | Proforma invoices | Full refresh | | `sales_orders` | Sales orders | Full refresh | | `waybills` | Delivery waybills | Full refresh | | `receipt_notes` | Receipt notes | Full refresh | ### Purchase documents | Table | Description | Sync method | | --- | --- | --- | | `purchases` | Purchase invoices | Full refresh | | `purchase_refunds` | Purchase refunds | Full refresh | | `purchase_orders` | Purchase orders | Full refresh | | `purchase_shipments` | Purchase shipments | Full refresh | | `payments` | Payments | Full refresh | ### Catalog and contacts | Table | Description | Sync method | | --- | --- | --- | | `contacts` | Contacts (customers and suppliers) | Full refresh | | `contact_groups` | Contact groups | Full refresh | | `products` | Products in the catalog | Full refresh | | `services` | Services in the catalog (includes archived) | Full refresh | | `warehouses` | Warehouses | Full refresh | ### Accounting and treasury | Table | Description | Sync method | | --- | --- | --- | | `ledger_entries` | Ledger entries (one row per line) | Full refresh | | `accounting_accounts` | Chart of accounts (includes archived and empty) | Full refresh | | `taxes` | Tax configurations | Full refresh | | `treasury_accounts` | Treasury accounts | Full refresh | | `payment_methods` | Payment methods | Full refresh | ### CRM | Table | Description | Sync method | | --- | --- | --- | | `funnels` | Sales funnels | Full refresh | | `leads` | CRM leads | Full refresh | | `events` | CRM events | Full refresh | ### Projects | Table | Description | Sync method | | --- | --- | --- | | `projects` | Projects | Full refresh | | `tasks` | Project tasks | Full refresh | | `project_times` | Time entries for projects | Full refresh | ### Team | Table | Description | Sync method | | --- | --- | --- | | `employees` | Employees | Full refresh | | `employee_times` | Employee time entries | Full refresh | ## Configuration | Option | Description | | --- | --- | | `API key` **Type:** password **Required:** True | Create a key in Holded under **Settings > API**. Give it read permission for the tables you want to sync, and `account:info.read` so PostHog can check the key. | ## Supported tables | Table | Description | Sync method | Incremental field | Primary key | | --- | --- | --- | --- | --- | | `invoices` | Sales invoices issued to customers. | Full refresh | — | — | | `credit_notes` | Credit notes that correct or refund sales invoices. | Full refresh | — | — | | `sales_receipts` | Sales receipts (simplified invoices) issued to customers. | Full refresh | — | — | | `estimates` | Estimates (quotes) sent to customers. | Full refresh | — | — | | `proformas` | Proforma invoices sent to customers before the final invoice. | Full refresh | — | — | | `sales_orders` | Sales orders received from customers. | Full refresh | — | — | | `waybills` | Waybills (delivery notes) for goods shipped to customers. | Full refresh | — | — | | `receipt_notes` | Receipt notes issued in the account. | Full refresh | — | — | | `purchases` | Purchase invoices received from suppliers. | Full refresh | — | — | | `purchase_refunds` | Refunds of purchase invoices from suppliers. | Full refresh | — | — | | `purchase_orders` | Purchase orders sent to suppliers. | Full refresh | — | — | | `purchase_shipments` | Purchase shipments (goods received notes) from suppliers. | Full refresh | — | — | | `payments` | Payments and collections recorded against documents. | Full refresh | — | — | | `contacts` | Customers, suppliers and other contacts. | Full refresh | — | — | | `contact_groups` | Groups used to organize contacts. | Full refresh | — | — | | `products` | Products in the inventory catalog. | Full refresh | — | — | | `services` | Services that can be sold, archived ones included. | Full refresh | — | — | | `warehouses` | Warehouses that hold inventory stock. | Full refresh | — | — | | `ledger_entries` | Lines of the accounting daily ledger. Each ledger entry has one row per line. | Full refresh | — | — | | `accounting_accounts` | Accounts of the chart of accounts, with their debit, credit and balance. | Full refresh | — | — | | `taxes` | Taxes configured in the account. | Full refresh | — | — | | `treasury_accounts` | Treasury accounts: bank accounts, cards, payment gateways and cash. | Full refresh | — | — | | `payment_methods` | Payment methods that can be set on documents. | Full refresh | — | — | | `funnels` | CRM funnels (sales pipelines) and their stages. | Full refresh | — | — | | `leads` | CRM leads (deals) in the funnels. | Full refresh | — | — | | `events` | CRM events such as calls, meetings and other activities. | Full refresh | — | — | | `projects` | Projects in the account. | Full refresh | — | — | | `tasks` | Tasks in projects. | Full refresh | — | — | | `project_times` | Time entries logged on projects. | Full refresh | — | — | | `employees` | Employees of the company. | Full refresh | — | — | | `employee_times` | Clock-in time entries of employees. | Full refresh | — | — | ## Troubleshooting ### Sync failing with an authentication error If your sync fails with a 401 or 403 error, your API key is invalid, expired, or missing the required permissions. Create a new key in Holded under **Settings** > **API** with read permission for the tables you want to sync and the `account:info.read` permission, then reconnect the source. ### Sync failing for a specific table If a single table fails with a 403 error, the API key doesn't have read permission for that table. Either update the key's permissions in Holded or deselect the table in PostHog.