HubSpot to Google Sheets without Zapier (2026)

Use caseMay 15, 2026 · 7 min read

HubSpot's built-in Sheets export is a scheduled CSV dump. It runs daily, gives you flat data, and loses the relationships between contacts and deals. Zapier's HubSpot → Sheets recipes are real-time, but they cost $20+/month and burn one Zap task per row.

The direct path: HubSpot's REST API is well-documented, supports private app tokens, and rate-limits at a generous 100 requests / 10 seconds. A spreadsheet add-on with a HubSpot connector can pull whatever you ask for, on-demand, with no middleware.

What you can pull

Each goes into rows. Use Sheets' pivot tables, formulas, and conditional formatting to slice however you want.

Setup: 5 minutes

Step 1: install gptsheet

Extensions → Get add-ons → search "gptsheet". Activate a license that includes the CRM Pack add-on (HubSpot, Salesforce, Zoho, Apollo — $199 one-time).

Step 2: create a HubSpot private app

  1. HubSpot → Settings (gear icon) → IntegrationsPrivate Apps → Create private app.
  2. Name it gptsheet-reader. No logo needed.
  3. On the Scopes tab, enable read for: crm.objects.contacts.read, crm.objects.companies.read, crm.objects.deals.read, crm.objects.tickets.read, crm.lists.read.
  4. Create app → click Show token on the resulting page. Copy the token (starts with pat-na1-...).

Step 3: connect

Sidebar → Menu → Connectors → HubSpot → paste the token → Connect. The connector verifies by making a single GET /crm/v3/owners call.

Pulling the data

Each connector ships with canned actions. For HubSpot:

ActionWhat it returns
List recent contactsUp to 100 contacts with default properties.
Search contactsFiltered query — by lifecycle stage, owner, last activity date.
List deals by pipelineAll deals in a named pipeline, with stage.
List companiesUp to 100 companies with industry, size, revenue properties.
Get contact engagementsAll emails / calls / notes for a contact ID.
List recent ticketsOpen + recently-closed support tickets.

Click ▶ Run now on any action — rows are written into the active cell. The same action is saved as an Import; refresh on demand or schedule it (hourly / daily / weekly).

Patterns you'll use

Weekly pipeline report

Action: List deals by pipeline (your sales pipeline ID). Schedule: weekly Monday. Result: a fresh Monday-morning report with every deal, its stage, and its amount. Combine with Sheets pivot tables to break down by stage / owner.

Stale-contact cleanup

Action: Search contacts filtered by last_activity_date < 180 days ago. Result: contacts that haven't been touched in 6 months. Pipe through =AI_CLASSIFY to bucket as "re-engage / sunset / archive". One-click cleanup workflow.

Lead enrichment

Action: List recent contacts. For each contact, run =AI_WEB("company size and industry of " & B2) against the company column to auto-enrich. Cheap alternative to Clearbit for small batches.

What about real-time?

If you need second-level freshness — e.g., new lead pings a Sheet within 30 seconds — HubSpot webhooks → cloud function → Sheets API is the right pipeline. But for 95% of sales ops workflows (weekly pipeline reviews, monthly cohort reports, daily new-contact lists), hourly refresh is plenty.

Privacy

gptsheet is BYOK — your HubSpot token is stored in browser localStorage, never on our servers. Every API call goes from your Sheet to api.hubapi.com directly. We only see your gptsheet license key, and only when verifying it.

The CRM Pack

The HubSpot connector lives in the CRM Pack add-on, which also includes Salesforce, Zoho, and Apollo. $199 one-time, attaches to any plan tier. Combined with the chat agent, you get "ask my CRM in plain English" inside Sheets — without buying a $200/month BI tool.

Get the HubSpot connector (CRM Pack)

$199 add-on for any gptsheet plan. Includes HubSpot, Salesforce, Zoho, Apollo.

Get gptsheet — from $49\n