Most HubSpot teams didn't choose Zapier because they enjoy paying per task. They chose it because a HubSpot workflow could rarely start from anything outside HubSpot, and couldn't do much outside HubSpot once it ran.

Both halves of that have changed. HubSpot's new workflow builder, which is replacing the classic workflow engine, can start a workflow when a Google Sheet row is added or updated, when something happens in Slack, or when a webhook arrives. Every action, native or from Marketplace apps like 0CodeTools and AI Studio, is available in it.

On the other end, workflows already post to Slack, write to Google Sheets and create Asana tasks natively. Apps add the rest: 1:1 email from a real Gmail inbox, Notion pages, Telegram messages, Google Ads offline conversions, AI enrichment.

So the 2026 question isn't "Zapier or HubSpot?" It's which of your Zaps still need a middleman. When HubSpot is the source or the destination, the answer is usually none of them.

This guide gives you the decision rules, a replacement map for the Zaps teams run most, seven workflows (most of them interactive diagrams you can click through), the cost math and a migration plan. It's also honest about what Zapier still does better.

TL;DR

  • ✓Move to HubSpot: Zaps that start or end in HubSpot. Slack and Teams alerts, Google Sheets rows, Asana tasks, record updates, and anything HubSpot can now trigger on: Google Sheet rows, Slack events, webhooks, app events like "Stripe: Invoice paid".
  • ✓Move with an app: 1:1 email from a rep's Gmail, Notion pages, Telegram messages, Google Ads offline conversions and AI steps. 0CodeTools and AI Studio add these as workflow actions.
  • ✓Go hybrid: HubSpot-triggered Zaps whose destination has no HubSpot action. Fire them from a workflow with a webhook step the moment the workflow reaches it.
  • ✓Keep in Zapier: app-to-app automations that never touch HubSpot, and long-tail apps with no HubSpot action and no usable API.
  • ✓Check your plan: workflows need a Professional or Enterprise hub. In classic workflows, the webhook trigger, Send a webhook and Custom code need Data Hub Professional or Enterprise.

What changed: HubSpot workflows can start outside HubSpot

For years, "HubSpot workflows can't do that" meant one of two things: the trigger lived in another app, or the action did. Zapier filled both gaps. In 2026, HubSpot closed most of the first gap itself, and Marketplace apps closed most of the second.

The new workflow builder: app triggers, webhooks and schedules

HubSpot's new workflow builder opens on a canvas with one Trigger node. Click Choose trigger and the panel shows three tabs: Popular, HubSpot and Apps. Try it below. It's a replica of the panel from a live portal, so click around.

ExitNew workflow
Run draftPublish
Choose trigger
Search triggers
HubSpot triggers
Explore all HubSpot
App triggers
Explore all apps
ID: Trigger
Trigger
Choose trigger
+

Pick a trigger on the left. App triggers start the workflow from outside HubSpot.

The HubSpot triggers are Property value changed, Record created, Form submission, Records match criteria, Run manually, Run on a schedule and Webhook event is received. Records match criteria, Run on a schedule and Webhook event is received are marked New. Under App triggers, Slack and Google Sheets (both built by HubSpot) start a workflow from outside HubSpot, and Explore all apps lists more.

Pick Google Sheets and you get Google Sheet row added or updated, configured with Trigger when and Connected account. After the trigger, + adds an Action, a Branch or a Delay, and every action is available there, including the ones from Marketplace apps such as 0CodeTools and AI Studio.

Three things to know about the Google Sheets trigger, from HubSpot's documentation:

  • It checks about once a minute. Connected sheets are checked every minute for changes, so expect roughly a minute between the edit and the workflow starting.
  • Repeated rows don't re-trigger. If the exact same row of values has existed in the sheet before, it won't start the workflow again.
  • Don't rename headers on a live sheet. Changing a column title re-enrolls every row, because HubSpot can't tell a rename from a column being deleted and re-added.

Webhook event is received is the new builder's answer to a Zapier Catch Hook. You create an event, connect the URL HubSpot gives you to the sending app, click Listen for events, and review the event's properties. Then you decide whether to link the event to CRM records or keep it unconnected. Properties from the webhook work as tokens in later actions.

Run on a schedule covers the "every Monday morning" Zaps. HubSpot's documentation says it also supports custom intervals, such as every three days.

Classic workflows: webhooks and app events

The classic workflow editor has two outside-in triggers of its own:

  • When a webhook is received, under Advanced options. HubSpot's example: "Webhook is received from a third party app after a new contact is created." It needs Data Hub (formerly Operations Hub) Professional or Enterprise, accepts JSON only, and enrolls an existing record matched through a property that requires unique values. It doesn't create records.
  • App events, under When an event occurs. Installed apps add their own events to the trigger list. In the portal we checked, Stripe adds "Stripe: Charge captured", "Stripe: Charge succeeded", "Stripe: Checkout session completed", "Stripe: Invoice paid", "Stripe: Payment intent payment failed" and "Stripe: Payment intent succeeded". Zoom, AI Studio for Workflows and other apps add theirs.

The Google Sheets trigger lives in the new builder. It did not appear in the classic editor's event list when we checked in September 2026.

The action side was mostly there already

Actions were always the easier half. HubSpot's own integrations add Send Slack notification and Create Slack channel (Slack), Create Google Sheet row and Update data in a Google Sheet (Google Sheets), Create an Asana task (Asana) and Send Microsoft Teams Notifications (Microsoft Teams).

The HubSpot Marketplace lists 2,000+ apps, and connected apps list their workflow actions under the app's name in the action picker. That's where our apps come in. 0CodeTools adds 31 workflow actions, including Send email with Gmail, Send Google Ads Conversion, Create Notion page, Send Telegram notification and API Webhook Connector. AI Studio adds AI steps such as Send to AI, Web Search and Company Insights.

Which Zaps to move, and which to keep

The rule is simple: if HubSpot is the trigger or the destination, the Zap is a candidate to move. If HubSpot isn't in the loop at all, leave it in Zapier.

If the Zap...Do thisBuild it with
Starts in HubSpot and ends in HubSpot (update a record, create a task, associate records)MoveNative workflow actions
Starts in HubSpot and ends in Slack, Teams, Google Sheets or AsanaMoveHubSpot's native integration actions
Starts in HubSpot and ends in Gmail, Notion, Telegram or Google AdsMove0CodeTools or Telegram for HubSpot actions
Starts in Google Sheets, Slack, a webhook or an app with app events, and ends in HubSpotMoveNew builder triggers, classic webhook trigger or app events
Starts in HubSpot and ends in an app with no HubSpot actionGo hybridAPI Webhook Connector to the app's API or to a Zapier Catch Hook
Never touches HubSpotKeep in ZapierZapier

What you gain by moving:

  • No extra hop. When the trigger happens inside HubSpot, the workflow runs on the event itself. There's no polling interval between HubSpot and a third tool.
  • No per-step bill for native steps. Zapier counts every successful action as a task. Native HubSpot steps like Branch, Delay, Edit record or Send Slack notification don't consume tasks or app credits.
  • The whole CRM in reach. Branch on any property, pull data from associated records, route by owner. A Zap starts with what the trigger hands it; anything else takes extra lookup steps.
  • One place to debug. A workflow's action logs show which record hit which step, and why.

And the honest limits:

  • Plan tier. Workflows need a Professional or Enterprise hub (Marketing Hub, Sales Hub, Service Hub, Data Hub, Smart CRM or Revenue Hub). Starter plans get simple automations, whose documented actions are Delay, Send internal email notifications, Create task, Add to static segment and Run custom agent, and Sales and Service Hub Starter add up to 50 workflows with restricted triggers and actions. Third-party app actions aren't on the documented Starter list.
  • Data Hub features. In classic workflows, the When a webhook is received trigger, the Send a webhook action, Custom code, Format data and daily, weekly or monthly schedules need Data Hub Professional or Enterprise.
  • Workflow limits. Marketing, Sales and Service Hub Professional include up to 300 workflows; Enterprise includes up to 1,000.
  • App credits. Marketplace apps bill their own way. 0CodeTools uses action credits (see pricing).
  • A different mental model. Enrollment triggers, re-enrollment and branches don't map one-to-one onto Zap filters and Paths. Plan to rebuild the logic, not copy it step by step.

The replacement map

Common HubSpot Zaps, and what replaces each one inside a workflow.

Zap you run todayHubSpot workflow equivalentWhat you need
New lead or deal, message in SlackSend Slack notification (HubSpot's Slack integration): post to channels, users or the record owner, with buttons to create tasks or update the record from SlackSlack connected by a Super Admin or a user with App Marketplace permissions
Deal won, create a Slack channelCreate Slack channelCompany- or deal-based workflow; the record needs an owner
Alert in Microsoft TeamsSend Microsoft Teams NotificationsTeams integration; private channels aren't supported
Personal email from a rep's GmailSend email with Gmail (0CodeTools)Gmail or Google Workspace mailbox connected in 0CodeTools
Transactional email through SendGridSend email with SendGrid (0CodeTools)0CodeTools
HubSpot data into a Google SheetCreate Google Sheet row, Update data in a Google SheetAny Professional or Enterprise hub; up to 20 cells per row per action
New Google Sheet row into HubSpotTrigger Google Sheet row added or updated, then Create recordHubSpot's new workflow builder
Webhook into HubSpotWebhook event is received (new builder) or When a webhook is received (classic)Classic trigger: Data Hub Professional or Enterprise, existing records only
Stripe payment into HubSpotApp event trigger such as Stripe: Invoice paidStripe app installed
Notion page or database itemCreate Notion page, Create Notion database item (0CodeTools)0CodeTools; HubSpot has no native Notion workflow action
Asana taskCreate an Asana task (Asana app, built by HubSpot)Asana Premium, Business or Enterprise; the project can't be private
monday.com itemNo native workflow action. Use monday.com's own HubSpot app (recipes set up in monday.com) or HubSpot's Monday.com data syncmonday.com Standard or Pro for the recipes app
Telegram messageSend Telegram Message to Group, Send Telegram Message to Contact and more (Telegram for HubSpot); Send Telegram notification (0CodeTools) for internal alertsTelegram for HubSpot: $49/month or $490/year
Google Ads offline conversionSend Google Ads Conversion (0CodeTools)A GCLID stored on the record
Any REST API, or an app only Zapier connects toAPI Webhook Connector (0CodeTools) or native Send a webhookSend a webhook: Data Hub Professional or Enterprise
ChatGPT or Claude stepSend to AI, Send to OpenRouter, Web Search, Company Insights (AI Studio); Ask Anthropic (Anthropic app, built by HubSpot); HubSpot AI actions like Data Agent: Research and Summarize recordHubSpot AI actions use HubSpot Credits (10 per AI action run)
Approval step before an actionSend Approval (Slack, Email) (0CodeTools)0CodeTools
Delay, Filter or PathsDelay, Branch; Random delay (0CodeTools)Native, plus 0CodeTools for Random delay
FormatterFormat data (native); Transform Text (0CodeTools)Format data: Data Hub Professional or Enterprise
Find, create or update records and associationsCreate record, Edit record, Create associations; Find and associate, Copy associations, Find and merge (0CodeTools)Native, plus 0CodeTools
Zaps that run on a timerRun on a schedule (new builder) or Based on a schedule (classic)Classic daily, weekly or monthly schedules: Data Hub Professional or Enterprise

Two rows deserve a note. monday.com has no native HubSpot workflow action today, so either sync the records or call monday.com's API from a workflow with the API Webhook Connector. Telegram bots can only message people who started the bot first, which matters for customer-facing messages.

Seven workflows that replace common Zaps

The diagrams below mirror HubSpot's classic workflow editor. Steps marked "Click to see configuration" open the real settings panel with the exact field labels; hover the (i) icons for the tooltip text from the live action. The Google Sheets and webhook examples use the new builder instead. All company and people names are sample data.

1. New demo request: Slack alert, sheet row and a reply from a real inbox

This is the classic three-step Zap: HubSpot form submission, message in Slack, row in a Google Sheet, email from Gmail. Steps 1 and 2 are native HubSpot actions.

Step 3 is why the Zap existed. HubSpot has no native workflow action that sends a plain 1:1 email from a rep's mailbox. Its Send email action sends automated marketing emails (Marketing Hub Professional or Enterprise).

The native 1:1 route is a sequence. The Enroll in a sequence workflow action needs Sales Hub or Service Hub Enterprise; on Professional, a sequence's own Automation tab can enroll contacts, but only on triggers like a form submission or page view.

Trigger enrollment for contacts
When this happens
Group 1
Form submission is Demo Request any number of times anytime
Re-enroll onDetails
+
1. Send Slack notification

Post New demo request to #inbound-leads and notify the Contact owner

+
2. Create Google Sheet row

Add a row to Biglytics demo requests with name, email and company

+
3. Send email with Gmail

Send a Gmail email from maria@biglytics.net Subject: Your Biglytics demo request

Click to see configuration
+
4. Branch

Check branches in order: = SENT, = FAILED, and None met.

3 branches - click to see paths
+
End

Click Send email with Gmail to open its panel. What matters:

  • From lists every Gmail and Google Workspace (formerly G Suite) mailbox connected in 0CodeTools under Integrations → Gmail. Personal @gmail.com accounts work too.
  • To usually holds the token Email (Enrolled contact). Reply-To is optional; leave it empty and replies go to the From address.
  • Body format is Plain text (the default) or HTML. Subject and Body accept HubSpot data tokens.
  • The step returns Result = SENT or FAILED. The branch turns a failed send into a task for the owner instead of a silent gap.

Each sent email is logged on the contact's timeline. When you connect a mailbox, 0CodeTools asks for two permissions: "Send email on your behalf (we cannot read your inbox)" and "View your email address (to label this connection)". It can send; it can't read.

Here's what the lead receives. Toggle the body format to compare:

Body format:
Recipient's inbox
Your Biglytics demo request
ML
Maria Lopez <maria@biglytics.net>
to jordan@acme.io

Hi Jordan, Thanks for requesting a Biglytics demo. What would you most like to see? Reply here and I will send you two times that work this week. Maria

Sent from a real mailbox, so replies land in that inbox. Sample data.

Want every lead to hear from their own rep? From is a dropdown of connected mailboxes, not a token. So per-owner sending is a Branch on Contact owner with one Send email with Gmail step per rep. Every connected mailbox shows up in the list:

1. Send email with Gmail
CancelSave
From *

Every Gmail or Google Workspace mailbox connected in 0CodeTools appears here.

1. Send email with Gmail

Send a Gmail email from maria@biglytics.net Subject: Your Biglytics demo request

Click a mailbox to change the sender

Trigger enrollment for contacts
When this happens
Group 1
Form submission is Demo Request any number of times anytime
Re-enroll onDetails
+
1. Branch

Check branches in order: Maria Lopez, Tom Becker, and None met.

3 branches - click to see paths
+
End

The limits, plainly: one recipient per send, no attachments yet, and Google's own sending limits per mailbox. Google documents about 500 emails a day for a personal Gmail account and 2,000 messages a day per Google Workspace user (500 on trial accounts, and on new accounts until the domain has paid at least $100). This is for 1:1 email from people, not bulk marketing. Each sent email uses one 0CodeTools credit, and failed sends aren't charged.

Full details on the Send email with Gmail page, with more use cases in our Gmail workflow guide.

2. Stripe invoice paid: mark the customer and tell Google Ads

The Zap: Stripe payment, update HubSpot, send an offline conversion to Google Ads. With the Stripe app installed, Stripe: Invoice paid is a trigger in the classic editor under App events, and the conversion upload is one 0CodeTools action.

Why bother sending it? Google Ads optimizes toward whatever conversions you report. If it only hears about form fills, it finds more people who fill in forms. Here's the loop:

Ad click. With auto-tagging on, Google adds a gclid parameter to the landing page URL for every ad click.
Trigger enrollment for contacts
When this happens
Group 1
Stripe: Invoice paid any number of times anytime
Re-enroll offDetails
+
1. Edit record

Set Lifecycle stage to Customer

+
2. Send Google Ads Conversion

Send a conversion to Google Ads account 123-456-7890

Click to see configuration
+
3. Branch

Check branches in order: = UPLOADED, = FAILED, and None met.

3 branches - click to see paths
+
End

How to read it:

  • Re-enroll is off, so only a contact's first paid invoice becomes a conversion, and Order ID gives Google Ads a unique ID per contact.
  • The value comes from the CRM. Conversion Value takes a static number or a token; here it pulls the associated deal's amount with Amount (Deal: Most recently updated). If a paying contact might have no associated deal, use a static value instead.
  • It matches by GCLID only. HubSpot's default contact property Google Click ID holds "the Google Click ID associated with the contact's most recent Google Ads click". A contact without one returns Result = FAILED, and the branch flags it.
  • Timing follows the workflow. The conversion time is the moment the action runs. Google won't import a GCLID conversion more than 90 days after the click, or outside the conversion action's click-through window (30 days by default), so widen the window to fit your sales cycle.
  • Reporting lags. UPLOADED means the upload went through. Google says imported conversions can take several hours to show in reports.

Each uploaded conversion uses one 0CodeTools credit; failed uploads aren't charged. No Google Ads API developer token is needed.

Two honest comparisons. HubSpot's native ad conversion events (Marketing Hub Starter and up) have two documented triggers, lifecycle stage changes and HubSpot form submissions, with a value you set per event. Lifecycle events can match on hashed contact data as well as the GCLID. If that covers you, use it.

And Zapier can do this job too: Google documents an official Zapier integration for offline conversion import, on a paid Zapier plan. The workflow version keeps the upload next to the CRM data it depends on and fires on any trigger, from any object. Setup steps are on the Google Ads offline conversions page and in our guide to sending offline conversions.

3. New row in a Google Sheet: create the contact, then follow up

A common Zap: the events team logs booth leads in a shared Google Sheet, and Zapier turns each row into a HubSpot contact. HubSpot Community threads ask for exactly this, and the usual answer was a third-party tool like Zapier. In the new builder, it's a trigger:

ExitNew workflow
Run draftPublish
Choose trigger
Google Sheets triggers
Built by HubSpot
ID: Trigger
Trigger
Choose trigger
+

Pick a trigger on the left. App triggers start the workflow from outside HubSpot.

The workflow, step by step:

  1. Trigger: Google Sheets, then Google Sheet row added or updated. Pick the Google account under Connected account and set Trigger when.
  2. Create record: a contact built from the new row.
  3. Send email with Gmail from the event lead's own mailbox (say, maria@biglytics.net): a short "great to meet you at the booth" note from her own mailbox, so replies reach her.
  4. Send Telegram notification (0CodeTools) to the sales team's channel, so someone picks up the conversation.

Because every action is available in the new builder, steps 3 and 4 are the same 0CodeTools actions you'd use in a classic workflow.

Before you switch it on, remember the three Sheets rules from earlier: about a minute of lag, identical rows don't re-trigger, and renaming a header re-enrolls the whole sheet. Protect the header row in Google Sheets so nobody renames a column by accident, and tell the team.

4. A webhook from your own app: create the contact and alert the team

The Zap: a Catch Hook receives a sign-up from your product or a form tool, creates a HubSpot contact and posts to Slack. Webhooks by Zapier needs a paid Zapier plan; the HubSpot version needs no middle tool.

In the new builder:

  1. Trigger: Webhook event is received, then Create new event. Name it, paste the URL HubSpot shows into the sending app, and click Listen for events to capture a test.
  2. Review properties: on Next: Event properties, adjust each property's name and field type.
  3. Link or don't: choose Yes, link this event to CRM records or No, keep this event unconnected to CRM records. For sign-ups that aren't in HubSpot yet, keeping it unconnected and creating the record in the next step is the straightforward route.
  4. Create record: a contact, using the webhook's properties as tokens.
  5. Alert the team: a Slack notification with details from both the webhook and the new record, or a Send Telegram notification step.

The classic When a webhook is received trigger does a narrower job: it enrolls an existing record matched on a unique property, such as your app's user ID. Use it for updates like "trial activated", not new sign-ups. Data Hub Professional includes up to 10 webhook triggers, Enterprise up to 100.

5. Closed-won deal: Slack channel, Asana task, Notion page, Telegram ping

The kickoff Zap many agencies and B2B teams run: when a deal closes, spin up a channel, a project task and a notes page, and tell the team. It's four or more Zapier tasks per deal. In HubSpot, two of the steps are native and two come from 0CodeTools.

Trigger enrollment for deals
Only enroll deals that meet these conditions
Group 1
Deal stage is any of Closed Won (Sales Pipeline)
Re-enroll offDetails
+
1. Create Slack channel

Create a channel for the deal; the Deal owner is invited

+
2. Create an Asana task

Add a Kickoff task to the Client onboarding project

+
3. Create Notion page

Create a kickoff page under Client Onboarding

Click to see configuration
+
4. Send Telegram notification

Post the win to @biglytics_sales

Click to see configuration
+
End

Setup notes (the first two from HubSpot's documentation):

  • Create Slack channel works in company- and deal-based workflows. The record needs an owner, and the owner is invited by default.
  • Create an Asana task only sees projects that aren't private, and the user who connected Asana must be a collaborator on the project.
  • Create Notion page returns Page ID and Page URL as outputs, so a later Edit record step can save the link on the deal.

For customer-facing Telegram messages (a welcome message in a client group, say), use the Telegram for HubSpot actions such as Send Telegram Message to Group. More patterns in Telegram and Notion integration with HubSpot.

6. AI enrichment: new company, research it, classify it, write it back

The Zap: new HubSpot company, scrape the website, ask ChatGPT to classify it, update HubSpot. AI Studio does each step as a workflow action:

Trigger enrollment for companies
Only enroll companies that meet these conditions
Group 1
Website URL is known
Re-enroll offDetails
+
1. Company Insights

Read the company's website and describe the business

Click to see configuration
+
2. Web Search

Search the web for recent news about the company

Click to see configuration
+
3. Send to AI

Score the company against your ICP using steps 1 and 2, and save the answer to ICP fit

+
4. Edit record

Set Description to the Company Description from step 1

+
End

What each step hands to the next:

  • Company Insights takes the website and a Description Type ("1: Essential" or "2: Detailed") and returns Company Name, Company Description and Raw Webpage Content.
  • Web Search returns an AI generated answer, plus AI Summary of page 1 to 3 and Link to page 1 to 3.
  • Send to AI takes a model under Choose AI model (for example "OpenAI Basic (GPT-5-mini)"), a Prompt for AI, an optional Property to include with prompt, and a Save result to a property checkbox. Its output is AI Response.

If the model you want isn't in Send to AI's list, Send to OpenRouter runs any text model on OpenRouter, billed by actual model cost. Link your own OpenRouter key to pay OpenRouter directly, for a flat 1 credit (200 tokens) per run.

HubSpot also has native AI actions in the workflow picker, such as Data Agent: Research, Infer company value proposition and ICP and Research company news. They draw HubSpot Credits: 10 per AI action run, per HubSpot's product catalog. Compare both on a few records before you commit.

7. Everything else: keep the Zap, but let HubSpot trigger it

Some destinations have no HubSpot action and no API you want to call yourself. For those, don't fight it: keep the Zap, but let the workflow push the event to it, so only qualifying records reach Zapier. The API Webhook Connector posts to a Zapier Catch Hook from inside the workflow:

Trigger enrollment for contacts
Only enroll contacts that meet these conditions
Group 1
Lifecycle stage is any of Customer
Re-enroll offDetails
+
1. API Webhook Connector

POST contact tokens to a Zapier Catch Hook

Click to see configuration
+
End

The workflow decides who qualifies, so the Zap only runs (and only bills tasks) for records that matter. A Catch Hook needs a paid Zapier plan and fires when the request arrives; Zapier's polling triggers check every 2 minutes on Professional and 1 minute on Team.

HubSpot's native Send a webhook action does the same job if you have Data Hub Professional or Enterprise; it supports POST and GET and retries failed calls for up to three days. The full setup, authentication and pitfalls are in Trigger Zapier instantly from HubSpot.

What it costs: Zapier tasks vs HubSpot workflow actions

The two tools bill on different units, so compare the units first.

Zapier bills per task. A task is any successful action. Triggers, polling, Filter and Paths steps, Formatter and Delay steps, and failed actions don't count. Free gives you 100 tasks a month with two-step Zaps only. Professional starts at $19.99/month billed annually ($29.99 month to month) for 750 tasks and adds multi-step Zaps and Webhooks. Team starts at $69/month billed annually ($103.50 month to month) for 2,000 tasks.

Go over your limit with pay-per-task on and extra tasks cost 1.25x the base rate on annual plans or 2.5x on monthly plans, up to 3x your plan; with it off, your Zaps pause.

HubSpot doesn't meter most native steps. Workflows come with Professional and Enterprise hubs. Native actions like Send Slack notification, Create Google Sheet row, Edit record, Branch and Delay don't consume tasks. HubSpot's AI actions use HubSpot Credits (10 per run), and so does using a Data Studio dataset in a workflow.

Apps bill for their own steps. 0CodeTools has a free plan with 100 actions a month (no credit card) and paid plans from $49 to $249 a month for 3,000 to 70,000 actions. Send email with Gmail uses 1 credit per sent email and Send Google Ads Conversion uses 1 per uploaded conversion; failures aren't charged.

A worked example. Assumptions: a sample company (Biglytics) already on a HubSpot Professional hub, three HubSpot-centric Zaps, every run succeeds, Zapier prices as listed on its pricing page in September 2026.

AutomationRuns per monthZapier tasksHubSpot: native stepsHubSpot: 0CodeTools credits
Demo request: Slack alert, sheet row, Gmail reply4003 x 400 = 1,200Slack, Google Sheets400
Lead becomes SQL: Google Ads conversion, Slack alert1502 x 150 = 300Slack150
Deal closed won: Slack channel, Asana task, sheet row603 x 60 = 180All three0
Total1,680 tasks550 credits

On Zapier, 1,680 tasks is more than twice the 750 in Professional's entry tier, so you'd move up a task tier or to Team (2,000 tasks, from $69/month billed annually). In HubSpot, the native steps cost nothing extra, and 550 credits fit the entry 0CodeTools paid plan ($49/month for 3,000).

In this example the bills land in the same range, and we won't pretend otherwise. The difference is how they grow.

Every step you add to a Zap adds tasks on every run. A native HubSpot step adds nothing, and only the steps HubSpot can't do natively use app credits. Add one more native step, say an Edit record, to each automation and Zapier's count grows by 610 tasks a month. The HubSpot bill doesn't move.

The migration plan, phase by phase

Order matters more than speed. Each phase depends on the one before it.

Phase 1: Inventory. List every Zap that touches HubSpot: its trigger, each step, monthly task count, who owns it and what breaks if it stops. Zaps that nobody can explain are the first to go.

Phase 2: Classify. Run each Zap through the move / hybrid / keep table above. Start with the Zaps that burn the most tasks or matter most to revenue, like speed-to-lead replies.

Phase 3: Rebuild in HubSpot. One workflow per Zap to start; merge later if it helps. Add a Branch on every app action's Result output so failures create tasks instead of disappearing. Test with a single record: enroll one test contact in a classic workflow, or use Run draft in the new builder before you Publish.

Phase 4: Run in parallel, carefully. Internal steps (Slack alerts, sheet rows) are safe to run twice for a while. Customer-facing steps (emails) and Google Ads conversions are not. Switch those off in the Zap before you turn them on in HubSpot, so nobody gets two emails and Google doesn't get two conversions.

Phase 5: Switch off the Zap. Turn it off, don't delete it. Keep it until the workflow has handled a full cycle of the process it replaces, such as a month-end billing run.

Phase 6: Monitor. In classic workflows, the details page has Action logs, Enrollment history and Performance tabs. HubSpot keeps action logs for 90 days and enrollment history for 6 months, and you can export action logs to CSV. The new builder has a Run History tab next to Edit.

What Zapier still does better

Replacing Zapier isn't the goal. Fewer moving parts is. Keep Zapier where it's the better tool:

  • Automations that never touch HubSpot. Form tool to Google Drive, calendar to Notion, app to app. HubSpot has no business sitting in the middle.
  • The long tail of apps. If a tool has no HubSpot action, no HubSpot app event and no API you want to call, a Zapier connector is the practical answer. Trigger it from HubSpot with a webhook, as in walkthrough 7.
  • Heavy data shaping without Data Hub. Zapier's Formatter, Paths and Looping don't cost tasks. In classic workflows, Format data and Custom code need Data Hub Professional or Enterprise, and custom code must finish within 20 seconds.
  • HubSpot Starter portals. The documented actions for Starter's simple automations don't include third-party app actions. Until you move to Professional, Zapier may still be the practical way to reach other apps from HubSpot data.
  • Teams who already live in Zapier. If your ops people know Zapier well and your HubSpot admin is stretched, a working Zap can wait. Move it when you touch it anyway.

Want us to do it?

We're a HubSpot Diamond Solutions Partner, and we build and maintain 0CodeTools and AI Studio. We'll audit your Zaps, tell you which ones to move, and rebuild them as HubSpot workflows. See HubSpot integrations, or hand the ongoing work to our RevOps support team.

Doing it yourself? Install 0CodeTools from the HubSpot Marketplace or create a free account. The free plan includes 100 actions a month, no credit card.

Related guides

Frequently asked questions

Can HubSpot workflows replace Zapier?+
For automations where HubSpot is the trigger or the destination, usually yes. HubSpot's new workflow builder can start from a Google Sheet row, a Slack event, an incoming webhook or a schedule, and classic workflows can start from app events such as Stripe: Invoice paid. HubSpot's integrations cover Slack, Google Sheets, Asana and Microsoft Teams, and apps like 0CodeTools and AI Studio add Gmail, Notion, Telegram, Google Ads conversions and AI steps. Keep Zapier for automations that never touch HubSpot.
Can a Google Sheets row trigger a HubSpot workflow?+
Yes, in HubSpot's new workflow builder: Choose trigger, Apps, Google Sheets, then Google Sheet row added or updated. HubSpot checks connected sheets every minute, so expect about a minute of lag. A row whose exact values existed before won't re-trigger, and renaming a column re-enrolls every row.
Can I use 0CodeTools or AI Studio actions in HubSpot's new workflow builder?+
Yes. The new workflow builder is replacing HubSpot's classic workflow engine, and every action, native or from Marketplace apps like 0CodeTools and AI Studio, is available in it. A Google Sheets-triggered workflow can send email with Gmail or run an AI step directly.
Which HubSpot plan do I need to replace Zapier?+
Workflows need a Professional or Enterprise hub. Starter plans get simple or restricted automations, and third-party app actions aren't on the documented Starter action list. In classic workflows, the When a webhook is received trigger, Send a webhook, Custom code, Format data and daily, weekly or monthly schedules need Data Hub Professional or Enterprise.
Can HubSpot receive a webhook like a Zapier Catch Hook?+
Yes. The new builder's Webhook event is received trigger gives you a URL, captures a test event, and lets you use its properties as tokens, with or without linking the event to CRM records. The classic When a webhook is received trigger needs Data Hub Professional or Enterprise and only enrolls an existing record matched on a unique property.
Can a HubSpot workflow send an email from a rep's Gmail?+
Natively, only through sequences. The Enroll in a sequence workflow action needs Sales Hub or Service Hub Enterprise, and on Professional a sequence's Automation tab can enroll contacts only on triggers like form submissions or page views. The 0CodeTools Send email with Gmail action sends a 1:1 email from any connected Gmail or Google Workspace mailbox, logs it on the record's timeline, and returns SENT or FAILED for branching. Google's daily sending limits per mailbox apply, so it's for personal email, not bulk marketing.
How do I send HubSpot data to Notion, Asana or monday.com without Zapier?+
Notion: use 0CodeTools Create Notion page or Create Notion database item, since HubSpot has no native Notion workflow action. Asana: HubSpot's Asana app adds Create an Asana task. monday.com: there's no native workflow action, so use monday.com's own HubSpot app, HubSpot's Monday.com data sync, or the 0CodeTools API Webhook Connector.
Is HubSpot cheaper than Zapier?+
It depends on how many steps your automations have. Zapier bills every successful action as a task; Professional starts at $19.99/month billed annually for 750 tasks. Native HubSpot workflow steps don't consume tasks, and app actions use their own credits: 0CodeTools has a free plan with 100 actions a month and paid plans from $49 to $249 a month. The gap grows as you add steps.
Are HubSpot workflow triggers faster than Zapier's?+
For events inside HubSpot, the workflow runs on the event itself, with no polling hop. Zapier's polling triggers check every 15 minutes on Free, 2 minutes on Professional and 1 minute on Team, though some HubSpot triggers on Zapier are instant. HubSpot's Google Sheets trigger checks every minute.
What about Make?+
The same logic applies. Make bills credits per module action, with most actions costing 1 credit. Scenarios that start or end in HubSpot are candidates to rebuild as workflows; app-to-app scenarios can stay in Make.