HubSpot to Google Sheets without Zapier (2026)
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
- Contacts (with all properties)
- Companies
- Deals (open + closed, by pipeline stage)
- Tickets
- Engagements (calls, emails, meetings)
- Tasks, owners, lifecycle stages
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
- HubSpot → Settings (gear icon) → Integrations → Private Apps → Create private app.
- Name it
gptsheet-reader. No logo needed. - 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. - 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:
| Action | What it returns |
|---|---|
| List recent contacts | Up to 100 contacts with default properties. |
| Search contacts | Filtered query — by lifecycle stage, owner, last activity date. |
| List deals by pipeline | All deals in a named pipeline, with stage. |
| List companies | Up to 100 companies with industry, size, revenue properties. |
| Get contact engagements | All emails / calls / notes for a contact ID. |
| List recent tickets | Open + 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