Linking Modal as a source

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.

Learn more
PostHog Wizard hedgehog

Alpha release

This source is currently in alpha. The interface and available tables may change.

The Modal connector syncs your workspace billing data from Modal – daily and hourly cost breakdowns by object and environment – into PostHog, so you can analyze your serverless compute spend alongside your product data.

Prerequisites

You need a Modal account with a Team or Enterprise plan. Workspace billing reports are only available on these plans. Free and individual plans don't have access to the billing API.

Generate an API token in Modal settings. Use a service-user token with workspace billing access.

Adding a data source

  1. In PostHog, go to the Sources tab of the data pipeline section.
  2. Click + New source and click Link next to this source.
  3. Enter your credentials (see 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.

When linking Modal, you need:

  • Token ID – the token ID generated in Modal settings (starts with ak-).
  • Token secret – the token secret shown once when the token is created (starts with as-).

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 for a full explanation of how each mode works and how to choose between them.

Both billing tables support incremental sync on interval_start. Modal continuously updates cost data for recent intervals, so each incremental run re-pulls a trailing window and updates restated rows in place:

  • billing_report_daily – 3-day lookback window
  • billing_report_hourly – 6-hour lookback window

The first sync imports historical data:

  • Daily reports – 365 days of history
  • Hourly reports – 30 days of history

Configuration

OptionTypeRequired
Token IDtextYes
Token secretpasswordYes

Supported tables

TableDescriptionSync methodIncremental fieldPrimary key
billing_report_daily

Daily workspace costs by Modal object and environment.

Incremental, Full refreshinterval_start—
billing_report_hourly

Hourly workspace costs by Modal object and environment.

Incremental, Full refreshinterval_start—

TableDescriptionSync
billing_report_dailyDaily workspace costs by Modal object and environmentIncremental
billing_report_hourlyHourly workspace costs by Modal object and environmentIncremental

Each table includes these columns:

ColumnDescription
object_idIdentifier of the Modal object that incurred the cost, such as an App
descriptionDescription of the Modal object that incurred the cost
environment_nameName of the Modal environment that contains the object
interval_startStart of the billing interval in UTC
costCost for the billing interval before credits, reservations, and the network egress allowance
tagsUser-defined tags associated with the object during the billing interval

The primary key is (object_id, interval_start, environment_name).

Troubleshooting

Permission denied error

Modal returns a permission error if your account doesn't have access to workspace billing reports. This feature requires a Team or Enterprise plan. Check your Modal subscription in Modal settings.

Authentication error

If syncs fail with an authentication error, verify your token credentials:

  1. Check that your Token ID starts with ak- and your Token secret starts with as-.
  2. Confirm the token hasn't been revoked in Modal settings.
  3. Generate a new token if needed.

If your sync is failing or data looks wrong, see the Data warehouse troubleshooting guide. If that doesn't help, contact support – we're happy to help.

Still have questions?

Was this page useful?