Discover how to replace costly tools like HubSpot and Zapier with n8n and Supabase for just $49/month, saving $10,000 annually in marketing costs.
Most startups in Spain spend between €800 and €1,200 monthly on marketing automation tools like HubSpot, ActiveCampaign, Zapier Premium, Mailchimp, and a decent CRM. That translates to an annual expense of €9,600 to €14,400. However, what surprises me the most is that 70% of this money goes towards workflows that you could automate yourself in less than a week using n8n and Supabase. You don't need a team of 5 people or external consultants. You just need to understand the architecture well, execute the right workflows, and stop paying for licenses that only use 30% of their capacity.
Photo: ThisisEngineering on Unsplash
Over the past 18 months, I've migrated five B2B startups from traditional stacks to n8n + Supabase, achieving an average annual saving of €10,400. Two of these startups canceled HubSpot ($890/month), one stopped using ActiveCampaign + Zapier (combined $320/month), and the other two eliminated a costly mix of Intercom, Mailchimp, and Calendly Pro that cost them over €600 a month. In this article, I share the exact architecture we used, the workflows we built, and the costly mistakes you must avoid from day one.
Traditional Stacks Bleed You Dry Without Realizing
Before designing any workflow in n8n, it's crucial to conduct a thorough analysis of the actual monthly costs. It's not just about the contracted tier but what you effectively spend when you add up addons, additional users, contact limits, and unexpected "API usage" fees.
For example, in February 2026, I audited a SaaS startup in Barcelona with an ARR of 120,000. Its marketing stack cost €1,180/month:
- HubSpot Marketing Hub Professional: €890/month (10,000 contacts, 3 users)
- Zapier Professional: €73/month (50,000 task limit, though they used 12,000)
- Mailchimp Essentials: €87/month (5,000 contacts, though they only sent to 1,800 active)
- Calendly Professional: €24/month (2 users)
- Typeform Plus: €35/month
- Airtable Pro: €60/month (3 users)
This stack processed:
- 340 leads/month captured via forms
- 1,200 automated emails (onboarding, nurturing, abandoned cart)
- 48 scheduled meetings
- 80 records synced between HubSpot, Airtable, and their internal CRM (a Notion instance with API)
The problem wasn't that the tools were bad. The real issue was that they were paying for features they would never use. HubSpot charged them €890 for ABM features, social media scheduling, and advanced reports they never utilized. Zapier charged them €73 when 90% of their workflows were simple HTTP triggers + webhooks that n8n handles natively.
Core Architecture: n8n Self-Hosted + Supabase
Photo: Simon Kadula on Unsplash
Our migration involves three layers. First layer: n8n self-hosted on a VPS. We use DigitalOcean Droplets (4GB RAM, 2 vCPU, €24/month) with Docker Compose. n8n runs in one container, PostgreSQL in another. The initial setup takes about 40 minutes if you follow the official documentation step by step.
Second layer: Supabase as database and backend. We create a project in Supabase (Pro tier, $25/month) with five main tables:
contacts: email, name, company, source, lead score, created at, updated atcampaigns: campaign ID, name, type (email/sms/webhook), status, scheduled forcampaign_sends: relationship between campaigns and contacts, with timestamps and metricsevents: behavioral events table (page view, button click, form submission, email open)automations: metadata of active flows (trigger type, action sequence, last execution)
Third layer: triggers and webhooks between n8n and Supabase. We use Supabase Database Webhooks to trigger flows in n8n whenever a new contact enters contacts or an event is recorded in events. n8n executes the logic (scoring, segmentation, email sends via Resend or SendGrid API) and writes the result back into Supabase.
The total monthly infrastructure cost is €49 (€24 VPS + $25 Supabase). This replaces the €1,180/month of the previous stack. The gross annual saving is €13,572.
The Five Workflows That Eliminate 80% of Your Subscriptions
Here are the critical workflows we built in n8n. These five workflows replace HubSpot, ActiveCampaign, Zapier, and Calendly in most cases.
1. Lead Capture + Enrichment + Scoring
Trigger: HTTP Webhook receiving data from a form (Typeform, custom form on your landing page, or registration button).
Steps:
- n8n receives the POST request with email, name, company.
- Enriches the contact with the Clearbit API (freemium, 100 requests/month free; then $99/month if you need more).
- Calculates lead_score based on: corporate domain (+20 points), industry match (+15), company size > 50 employees (+10).
- Writes the contact to the
contactstable in Supabase. - If lead_score exceeds 40, triggers a webhook to Slack notifying the sales team.
Cost: $0 if you use less than 100 enrichments/month. If you exceed that amount, Clearbit charges $99/month. Previously, you paid €890/month for HubSpot to do exactly the same.
2. Email Nurturing Sequences
Trigger: Supabase Database Webhook in contacts table when lead_score changes and exceeds a threshold.
Steps:
- n8n receives the event.
- Reads the email and contact status from Supabase.
- Selects the appropriate email sequence (onboarding for trial users, nurturing for cold leads, upsell for paying users).
- Schedules the send with the Resend API (5,000 emails/month free, then $20/month for every 50,000).
- Writes a record in
campaign_sendswith status "scheduled".
Cost: $0 up to 5,000 emails/month. Mailchimp Essentials charges €87/month for 5,000 contacts, even if you only send to 1,000.
3. Event Tracking + Behavioral Triggers
Trigger: Your web/mobile app sends events to an n8n webhook whenever a user performs a significant action (opens app, completes onboarding, cancels a trial).
Steps:
- n8n receives the event (user_id, event type, timestamp, metadata).
- Writes the event to the
eventstable in Supabase. - Executes conditional logic: if
event_type === "trial_cancelled", triggers a retention email with a 20% discount. - If
event_type === "feature_X_used", increases the lead_score incontacts.
Cost: $0. Segment charges from $120/month for event tracking. Mixpanel charges from $89/month. Here you have it for free.
4. Meeting Scheduling with Dynamic Availability
Trigger: User clicks "Book a Call" on your website.
Steps:
- Your frontend makes a GET request to an n8n endpoint querying the Google Calendar API (OAuth configured beforehand).
- n8n returns available slots in the next 72 hours.
- User selects a slot; frontend sends a POST to n8n with the chosen slot and contact details.
- n8n creates the event in Google Calendar, sends a confirmation email via Resend, and writes a record in the
meetingstable in Supabase.
Cost: $0. Calendly Professional charges €12/month/user. With two users, that's €24/month wasted.
5. Bidirectional CRM Sync
Trigger: Scheduled job every 15 minutes.
Steps:
- n8n queries the
contactstable in Supabase to see which contacts havesynced_to_crm = false. - For each contact, makes a POST to your CRM API (Pipedrive, HubSpot CRM free, Notion with API, whatever you use).
- Marks the contact as
synced_to_crm = truein Supabase. - If there are changes in the CRM (deal stage updated, contact edited), a CRM webhook triggers n8n and updates Supabase.
Cost: $0 if your CRM has a free API (Pipedrive Essential, HubSpot CRM Free, Notion). Zapier charges from €29/month to do exactly the same.
Mistakes That Will Cost You $2,000 in the First Three Months
The most costly mistake I saw was at a startup in Valencia that implemented n8n without rate-limiting requests on webhooks. A malicious bot made 140,000 requests in 6 hours to their lead capture endpoint. n8n tried to process each request, overloaded the VPS CPU, and DigitalOcean charged them $180 in overage fees that month. Solution: implement rate limiting with nginx in front of n8n (maximum 10 requests/min per IP) and always validate the origin of the webhook.
Another common mistake is not having backups of the n8n database. n8n stores all your flows, credentials, and executions in PostgreSQL. If you lose that database, you could lose months of work. Set up automatic snapshots of the VPS (DigitalOcean offers them from €2/month) and export your flows weekly as JSON. Save them in a private GitHub repository.
Third mistake: using Supabase Realtime without understanding bandwidth costs. A startup synced its events table via Realtime to a real-time dashboard. In a high-traffic month (5,000 active users), Supabase charged them $87 for bandwidth overages. The solution was to use polling every 30 seconds for internal dashboards, reserving Realtime only for critical user-facing functions.
The final common mistake is not cleaning up old executions in n8n. n8n stores each execution in PostgreSQL. After three months, a startup accumulated 240,000 stored executions and their database weighed 8GB, making queries slow. Configure automatic deletion in Settings > Executions: retain only the last 1,000 executions or those from the last 30 days.
Migration Without Downtime: The 7-Day Plan
Day 1-2: Infrastructure Setup. Set up the VPS, install n8n with Docker Compose, create the project in Supabase, design the schema of your five main tables. Configure the API keys for Resend, Clearbit, Google Calendar.
Day 3-4: Build Flows in Parallel. Don't shut down HubSpot or Mailchimp yet. Create the five core flows in n8n, but test manually with test data before activating them. Verify that webhooks fire, emails send, and data writes correctly to Supabase.
Day 5: Test with Real Traffic at 10%. Set up an A/B split in your capture form: 10% of traffic goes to the n8n webhook, while 90% continues to HubSpot. Monitor for 24 hours and compare data in Supabase with HubSpot. If there are discrepancies, adjust.
Day 6: Scale to 50%, then 100%. If everything works correctly, increase the split to 50%. Wait 12 hours. If no errors, move 100% of traffic to n8n. Keep HubSpot active but not processing new leads.
Day 7: Migrate Historical Data and Cancel Subscriptions. Export your contacts from HubSpot as CSV, import them into the contacts table in Supabase with a Python script or directly from Supabase UI. Cancel HubSpot, Mailchimp, and Zapier. Immediate savings: €1,180/month.
Is It Worth It if Your Team Isn’t Technical?
Here's the honest answer: if your marketing team doesn't have at least one person with basic knowledge of APIs, webhooks, and SQL, this migration might cost you more in time than you save in money during the first year. n8n is visual and relatively user-friendly, but when something breaks (and it will), you need to know how to read logs, debug a malformed JSON, or adjust a query in Supabase.
In the five startups I migrated, four had a junior developer or a growth engineer who could take over the operation after the initial setup. One didn't have this and ended up hiring a freelancer for two months ($2,400 total) to maintain the flows. Still, the net savings were €8,000 that year.
If you're a technical founder or have a developer on the team, this migration takes a week part-time and saves you over €10,000 a year. If you don't have anyone technical, consider hiring a freelancer for $1,500-$2,500 for the initial setup, and then train someone from your team to operate the flows. Changes in n8n are visual and documentable; you don't need a senior engineer to adjust an email template or add a step in a flow.
Have you already migrated from a traditional marketing stack to self-hosted tools? What workflows were the toughest to replicate? For insights on how to streamline processes further, check out our article on Supabase vs MySQL: Saving $21,000 by Streamlining Processes. If you're interested in how AI can enhance your operations, consider reading about how Flex Saves $1.5B Annually with AI: Technical Guide.
🇪🇸 Also available in Spanish: Leer en español