<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=1198476139004771&amp;ev=PageView&amp;noscript=1">

Data Sources API for Data Studio

What is it?

A public API that lets developers create, manage, and ingest data into HubSpot Data Studio programmatically — no UI required. Two datasource types are supported:

  • - FILE — upload a CSV, XLS, XLSX, or TSV file to create a datasource
  • - JSON — define a schema and push structured data directly via API, with an incremental data-push endpoint for ongoing updates

All operations are accessible via standard OAuth.

Link to API doc here: https://developers.hubspot.com/docs/api-reference/2026-09-beta/data-studio/datasource-ingestion/guide

 

Full API surface:

POST /data-source — create a FILE datasource (CSV/XLS/XLSX/TSV)

GET — retrieve a datasource

PUT — full replace a datasource

DELETE — delete a datasource

POST /data-source — create a JSON datasource

POST /{id}/data-push — push rows to a JSON datasource

PATCH — rename a datasource

 

Why does it matter?

This API unlocks a more flexible, developer-friendly pathway for getting tabular data into HubSpot's Data Studio without needing to commit to CRM objects.

The CRM Imports API has strict requirements: data must map to CRM objects, and there's no incremental update path. Developers who want to push raw or custom data — not CRM records — are left without a clean option.

The Data Source Ingestion API is schema-agnostic. Data doesn't need to map to any HubSpot object type. Developers define the schema, ingest data via file upload or JSON, and it lands in Data Studio immediately available for datasets, reports, and activation across segments, workflows, and lists.

The data-push endpoint enables lightweight, ongoing ingestion for recurring data updates (partner enrichment feeds, operational snapshots, agent-generated outputs) without managing file uploads each time.

 

How does it work?

Creating a FILE datasource

Upload a CSV, XLS, XLSX, or TSV file as a multipart POST alongside a schema definition (column names and types). Ingestion is async — poll GET for lastIngestionStatus: SUCCESSFUL. Use PUT to replace the entire dataset with a new file.

POST /data-studio/data-source/2026-09-betaContent-Type: multipart/form-data  file: sample-data.csv request: {   "datasourceName": "Sample Data",   "datasourceType": "FILE",   "config": {     "file": {       "headerRowIndex": 1,       "columns": [         { "name": "email", "type": "STRING" },         { "name": "revenue", "type": "DECIMAL" }       ]     }   } } 

Creating a JSON datasource

Define the schema (column names and types) in the request body — no file required. Optionally include initial rows at creation time, or create schema-only and push data later. Optionally set a recordId field for deduplication. Ingestion is async — poll GET for lastIngestionStatus: SUCCESSFUL before pushing more data.

POST /data-studio/data-source/2026-09-beta {   "datasourceName": "Customer Snapshot",   "datasourceType": "JSON",   "config": {     "json": {       "columns": [         { "name": "email", "type": "STRING" },         { "name": "customer_id", "type": "INTEGER" },         { "name": "spend", "type": "DECIMAL" }       ],       "recordId": "customer_id"     }   } } 

Pushing rows incrementally (JSON only)

Once a JSON datasource is activated, push new rows without replacing the entire dataset:

POST /data-studio/data-source/2026-09-beta/{datasourceId}/data-push {   "data": [     { "email": "alice@example.com", "customer_id": 1, "spend": 450.00 },     { "email": "bob@example.com", "customer_id": 2, "spend": 125.00 }   ] } 

 

Who gets it?

Smart CRM Professional, Data Hub Professional

Topics: Smart CRM Professional, Data Hub Professional

Related articles


Leads Tab in Ads
8 Sep 2026

Create Campaign Goals via Goals API
8 Sep 2026

Ready to maximize your business growth with our HubSpot-accredited services?

Contact us today to learn how we can help you succeed.