5 ways to sync HubSpot with Google Sheets: official add-on vs Workflows vs Apps Script vs Brooked. Two-way sync, scheduled refresh, no Operations Hub.
HubSpot owns the CRM data for most modern SaaS go-to-market teams. The friction is that the people who need to slice, filter, and reconcile that data (RevOps, finance, leadership) usually want it in a spreadsheet, not in HubSpot's filtered list views. This guide walks through every realistic path: HubSpot's native CSV exports, Zapier or Make for trigger-based flows, HubSpot's own Operations Hub Data Sync, Apps Script + HubSpot API, and a full Brooked walkthrough including the OAuth flow and the AI agent for plain-English pipeline questions.
Tying pipeline to revenue? Finance teams pull QuickBooks into the same workbook to reconcile HubSpot deals against booked revenue , or compare Brooked to the connector RevOps usually reaches for in Brooked vs Coefficient.
HubSpot's official add-on vs a two-way sync connector
HubSpot now ships its own free HubSpot for Google Sheets add-on from the Workspace Marketplace, and it's worth being upfront about what it does and doesn't cover before you spend time evaluating anything else. It's a contacts-focused sidebar: you select rows in a sheet and push them into HubSpot as new or updated contacts, or look up a contact's HubSpot record without leaving the sheet. For teams whose only need is "get this spreadsheet of leads into HubSpot," it's genuinely the right, zero-cost answer: don't install a third-party connector just for that.
Where it stops: the official add-on does not do scheduled exports of deals, tickets, or companies into a sheet; it doesn't support two-way write-back on arbitrary properties (it's a one-directional push into HubSpot, plus read-only lookups); and it has no concept of multi-portal reporting if you manage more than one HubSpot account. It also doesn't expose custom objects or let you build a filtered, recurring pull of pipeline data the way a reporting workflow needs.
If what you're doing is data entry: cleaning a list in Sheets and syncing it into HubSpot contacts: stop reading and install the free add-on from the Marketplace. If you need the reverse (HubSpot data landing in Sheets on a schedule), any CRM object beyond contacts, write-back that isn't just contact upserts, or reporting that spans multiple portals, you need a dedicated connector. That's the gap Brooked and Coefficient fill, and it's also the gap HubSpot's own Operations Hub Data Sync only closes if you're already paying $720+/mo for Operations Hub Pro (more on that below).
The rest of this guide covers the five realistic paths for getting HubSpot CRM data into Sheets on a recurring basis: starting with a quick comparison table, then a walkthrough of each method.
Quick comparison: 5 ways to get HubSpot data into Sheets
| Method | Cost | Setup | Auto-refresh | Two-way sync | Code | Best for |
|---|---|---|---|---|---|---|
| HubSpot native CSV export | Free | 30 seconds per export | Manual | No | None | One-off snapshots |
| Zapier / Make / n8n | From $20/month | 1 hour | Trigger-based | Limited | None | Reactive workflows (new deal → row appended) |
| HubSpot Operations Hub Data Sync | Operations Hub Pro $720/mo+ | 1 hour | Real-time | Yes | None | Enterprise customers already on Operations Hub Pro |
| Apps Script + HubSpot API | Free | 2–3 hours | Time-driven trigger | DIY | Required | One-developer custom workflows |
| Brooked add-on | Free tier · Pro $29/user | Under 3 min | 15 min / hourly / daily | Yes | None | RevOps teams who want live pipeline reporting in Sheets with AI |
Quick clarification: HubSpot Data Sync is NOT a Google Sheets connector
Every team that goes looking for a HubSpot-to-Sheets path eventually lands on Operations Hub Data Sync and assumes that's the answer. It isn't. Data Sync syncs HubSpot with other CRMs (Salesforce, Pipedrive, Microsoft Dynamics) and a few line-of-business apps. It does not write to Google Sheets, and there's no Sheets destination in the picker. Stop searching for it. It doesn't exist.
The two things you actually have inside HubSpot for Sheets are: (1) a Workflow action (Operations Hub Professional or Enterprise only: gated behind the $720+/year tier), which creates new rows or updates rows in a Sheet whenever a HubSpot record changes; and (2) the official HubSpot for Google Sheets extension, which is for pushing data into HubSpot from Sheets (bulk contact updates, AI-assisted email drafting). Neither of these covers the most common task: pulling HubSpot CRM data out and into a sheet.
For that, you need one of the methods below: Apps Script + the HubSpot CRM API, a third-party connector, or a manual CSV export.
The lifecycle date properties RevOps actually needs
Most HubSpot exports default to the same five columns (email, first name, last name, company, lifecycle stage) and miss the time-stamped properties that make pipeline analysis possible. The two property families that matter:
- hs_lifecyclestage_subscriber_date, hs_lifecyclestage_lead_date, hs_lifecyclestage_marketingqualifiedlead_date, hs_lifecyclestage_salesqualifiedlead_date, hs_lifecyclestage_opportunity_date, hs_lifecyclestage_customer_date: when each contact entered each lifecycle stage. Lets you build a conversion waterfall and compute stage-to-stage rates.
- hs_v2_date_entered_<stage> and hs_v2_date_exited_<stage>, when each deal entered and exited every pipeline stage. Lets you compute stage velocity and identify which deals are stuck.
These properties exist on every HubSpot account but are invisible in default list views and the standard CSV export. To pull them via the API, name them explicitly in the properties parameter of the contact or deal request. In Brooked, they show up in the property picker when you start a query on the Contact or Deal object.
Method 1. HubSpot native CSV export
Every HubSpot list, report, and object table has an Export button. Click it, HubSpot emails a CSV or .xlsx, you upload it to Sheets. Free, native, no setup. Snapshot only: every refresh is manual.
Method 2. Zapier / Make / n8n
Automation platforms with rich HubSpot triggers, new deal, new contact, property changed, list membership change. Build a flow that fires on a trigger and appends a row to a sheet. Strong for reactive workflows; weak for analytical reporting (per-task pricing scales fast on high-volume orgs).
Method 3. HubSpot Operations Hub Data Sync
HubSpot's first-party bi-directional sync product. Sheets is a supported destination. Strong syncing semantics with conflict resolution. Requires Operations Hub Professional or Enterprise ($720+/mo), overkill for "I want HubSpot data in a sheet" unless you're already paying for it.
Method 4. Apps Script + HubSpot API
HubSpot has a comprehensive REST API. From Apps Script, OAuth into HubSpot, call /crm/v3/objects/deals, parse JSON, write to a sheet, schedule with time-driven triggers.
Pros: Free, customizable. Cons: OAuth token refresh management. 6-minute Apps Script timeout. You maintain the script.
Trigger Google Sheets updates from HubSpot webhooks
If you want a sheet to update the instant something happens in HubSpot: a deal closes, a ticket is created, a property changes - rather than on a polling schedule, the webhook path is the closest thing to real-time without paying for Operations Hub Data Sync. A HubSpot Workflow (the webhook action requires Operations Hub, though basic workflow enrollment is available on lower tiers) can POST a JSON payload to any URL when it fires. Point that at an Apps Script Web App deployment and you have a standing endpoint that appends a row every time the workflow runs - no polling, no time-driven trigger, no wasted API calls checking for changes that haven't happened.
The Apps Script side is a doPost(e) function deployed as a Web App. HubSpot's webhook action sends the payload as the request body, so you parse e.postData.contents as JSON and append whatever fields you care about:
function doPost(e) {
const SECRET = "your-shared-secret";
const params = JSON.parse(e.postData.contents);
if (params.token !== SECRET) {
return ContentService.createTextOutput("unauthorized").setMimeType(
ContentService.MimeType.TEXT
);
}
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Webhook Log");
sheet.appendRow([
new Date(),
params.objectId,
params.dealname,
params.dealstage,
params.amount,
]);
return ContentService.createTextOutput("ok").setMimeType(
ContentService.MimeType.TEXT
);
}The auth caveat: Apps Script Web Apps deployed with "Anyone" access are reachable by anyone who has the URL, and there's no built-in request signing from HubSpot's side to verify the sender. Deploy as "Anyone with the link," then enforce your own shared-secret check inside doPost (as above), pass the token as a query param or in the JSON body from the Workflow's webhook action, and reject anything that doesn't match. Rotate the secret if the URL ever leaks, and don't rely on obscurity alone.
HubSpot to Looker Studio via Google Sheets
Looker Studio doesn't have a native HubSpot connector, and the third-party ones in the Looker Studio gallery generally charge per-connector fees on top of whatever you're already paying for HubSpot. The common workaround is to use Sheets as a buffer: sync HubSpot deals, contacts, or tickets into a sheet on a schedule (via Apps Script, Brooked, or Coefficient), then point Looker Studio at that sheet with the native, free Google Sheets connector.
This pattern also tends to make dashboards noticeably faster, since Looker Studio is reading a flat, pre-shaped sheet instead of paginating live API calls through a connector on every load. See why Looker Studio dashboards load slowly for more on that. If you're comparing connector options for Looker Studio generally, the Looker Studio connector directory covers what's free vs. paid across the ecosystem.
Method 5, A Google Sheets add-on (Brooked)
Brooked's HubSpot connector OAuths into your portal, exposes every standard and custom object in a sidebar browser, lets you pick properties and apply filters using HubSpot's native filter syntax, schedules refresh, supports two-way write-back, and includes the AI agent for plain-English pipeline questions.
Step 1. Install Brooked
Install from the Workspace Marketplace. Free tier: 100 imports/month with AI Analyst.
Step 2. Connect HubSpot via OAuth
Brooked sidebar → Add data source → HubSpot. OAuth redirects you to HubSpot, you authorize the requested scopes (read on CRM objects + optional write for two-way sync), HubSpot redirects back. OAuth tokens refresh automatically.
Step 3. Pick objects, properties, and filters
Brooked's HubSpot browser shows every standard object (Contacts, Companies, Deals, Tickets, Line Items, etc.) plus any custom objects. Pick one, pick properties (Brooked surfaces every property including custom ones with custom_ prefixes), apply filters with HubSpot's native filter syntax (date ranges, stage, owner, amount), pick a destination range, click Import.
Step 4. Schedule refresh and configure write-back
Gear icon on the import → Auto-refresh, pick cadence. For two-way sync, click 'Convert to two-way sync', map sheet columns to HubSpot properties, pick HubSpot ID as the unique key, choose write mode (UPDATE only is the safest default). Writes go through HubSpot's API and appear in HubSpot's standard activity log.
Using the AI agent with HubSpot
Open Chat. Ask: "How many deals closed last quarter, average size?" or "Show me deals over $50K that haven't had activity in 14 days". The agent picks the right HubSpot objects + properties, builds the filter, fetches the data, and lands it in the sheet with derived columns added (days_stale, % of quota, etc.).
What about Microsoft Excel?
HubSpot's native CSV export delivers .xlsx natively. Coefficient supports HubSpot on both Excel and Sheets on Pro tier. Most RevOps teams that try Excel-as-live for HubSpot land on Sheets + Brooked for live reporting and export to .xlsx for board snapshots.
The verdict, which method when
I just need this list of deals once
→ HubSpot CSV export. Click Export on the HubSpot list, get an email with CSV, upload to Sheets. Don't overengineer.
I want a new deal to automatically append a row
→ Zapier or Make. Trigger-based row appends are exactly what Zapier excels at. Per-task pricing scales fast for high-volume orgs.
I want live pipeline reporting in Sheets across many properties
→ Brooked. Visual property picker, filter builder using HubSpot's native filter syntax, scheduled refresh, AI for plain-English pipeline questions.
We're already on Operations Hub Pro
→ HubSpot Operations Hub Data Sync. If you already pay $720+/mo for Operations Hub Pro, you have HubSpot's native bi-directional sync. Sheets is one of its destinations.
Troubleshooting common issues
Related Articles
- HubSpot to Google Sheets: Why Your Data All Goes to One Cell (and How to Fix It)
- How to Sync HubSpot Deals and Pipeline Data to Google Sheets in Real Time
- HubSpot Email Performance Data in Google Sheets: What's Possible and What Isn't
Frequently asked questions
Which HubSpot tiers does Brooked work with?
Every tier. Free, Starter, Professional, Enterprise. Brooked uses HubSpot's standard CRM API, available on all tiers. Higher tiers have higher daily API quotas, which matters at scale.
Does Brooked support HubSpot custom objects?
Yes. Any custom object defined in your account appears alongside standard objects (Contacts, Companies, Deals, Tickets).
Can Brooked write data back to HubSpot?
Yes. Update existing records, create new ones. Every write goes through HubSpot's API and is captured in HubSpot's standard activity log.
Can I blend HubSpot with my warehouse data in one sheet?
Yes: one of Brooked's strongest use cases. HubSpot deals in one tab, Snowflake or Postgres revenue actuals in another, reconcile with XLOOKUP or the AI agent.
How does Brooked compare to Coefficient or Supermetrics for HubSpot?
Coefficient has a strong HubSpot connector (~$83/user/mo annual on Pro). Supermetrics is more marketing-channel-focused; HubSpot is one of many sources. Brooked's edge: HubSpot + database/warehouse in the same sheet with AI and two-way write-back at $29/user.
Does Brooked work with HubSpot Marketing Hub data (emails, workflows, forms)?
Yes. Email statistics, workflow membership, form submissions, and landing page performance are accessible via the marketing scopes. Apply filters before importing. These can be very high-volume.
Is the OAuth connection secure?
Yes. HubSpot's official OAuth 2.0 flow. Tokens encrypted at rest. Brooked never sees your HubSpot password. Disconnect any time from HubSpot Settings → Integrations → Connected apps.
What about HubSpot Operations Hub Data Sync?
It's HubSpot's first-party bi-directional sync product, available on Operations Hub Professional+ ($720+/mo). If you already pay for that, use it for system-of-record syncing. Brooked is for ad-hoc and live pipeline reporting in Sheets, which Operations Hub doesn't really cover.
I have HubSpot and a bunch of spreadsheets: how do I connect them?
Install Brooked in Google Sheets, connect HubSpot via OAuth, and pull contacts, companies, deals, or pipeline straight into the tabs you already use, no copy-paste, no separate dashboard. The data refreshes on a schedule, and you can reconcile it against your existing spreadsheet models or ask the AI Analyst questions like 'deals by stage created this quarter.'
Connect HubSpot to Sheets in 3 minutes.
Free tier · 100 imports/month with AI for pipeline reporting. Two-way sync supported. See the full HubSpot integration details.
Install Brooked free →

