Why HubSpot costs more in 2026
HubSpot has restructured its offerings in recent years, The Starter plan, often cited as a reasonable entry point, now sits at $20 per seat per month but excludes advanced workflow automation, lead scoring, and custom reporting — features most sales teams rely on daily. For a five-person agency on Professional, the annual bill reaches $6,000, before adding Service Hub or Marketing Hub modules, each billed separately. HubSpot's pricing mechanics compound the issue: increases arrive with 30-to-60-day notice, annual contracts renew automatically, and exported data rarely arrives in a directly reusable format. The nominal cost therefore conceals an exit cost that few teams anticipate. Meanwhile, the open-source ecosystem has closed much of the functional gap. Twenty CRM, Formbricks for forms, and Chatwoot for support now cover most of the HubSpot footprint without contractual lock-in.
What you lose with HubSpot
- Captive data — HubSpot stores contacts, deals, and activities on its own infrastructure; CSV export is available but incomplete for custom properties and object associations.
- Annual price increases — since 2020, the Professional plan has increased by roughly 18% per year on average; nothing in the terms caps future revisions.
- Vendor dependency — automations, sequences, and reports are encoded in HubSpot's proprietary syntax and cannot be exported to another tool.
- Strict per-seat billing — adding a freelance collaborator or intern immediately triggers a full seat charge, with no proration for occasional access.
- No control over sensitive data — prospects, open deals, and contact data reside on US servers, complicating GDPR compliance for European clients.
- Tight coupling between hubs — Marketing Hub, Sales Hub, and Service Hub share a database but are billed separately; removing one breaks workflows in the others.
- Support limited to higher tiers — phone support and a dedicated account manager are only available from the Enterprise plan ($150+/seat/month) upward.
Twenty CRM at a glance — what it covers
Twenty CRM is an open-source CRM developed by Twenty HQ, published under the AGPL-3.0 licence, and available on GitHub with more than 22,000 stars at the time of writing. It uses a modern architecture: a GraphQL backend in Node.js, a React frontend, and a PostgreSQL database. The interface borrows visual conventions from Notion — blocks, list or Kanban board views, global search — which shortens the learning curve for teams already comfortable with contemporary tools. Functionally, Twenty covers the core use cases of a commercial CRM: contact and company management, customisable sales pipeline, activity tracking (calls, emails, meetings), object-linked notes, webhooks, and an open GraphQL API. Workflow automations are progressively landing in the 2025-2026 releases, with a triggers-and-actions system that handles the most common scenarios — automatic assignment, Slack notifications, field updates. However, Twenty does not replace HubSpot Marketing Hub: mass email campaigns, predictive lead scoring, and landing pages are not in scope today. Being clear about this matters: if your HubSpot use is primarily Marketing, migrating to Twenty alone will not be sufficient and will need a complementary tool such as Mautic or Listmonk.
HubSpot vs Twenty CRM — feature comparison
| Criteria | HubSpot Professional | Twenty CRM (self-hosted) |
|---|---|---|
| Monthly cost (5 seats) | $500/month | VPS cost only |
| Licence | Proprietary SaaS | AGPL-3.0, open source |
| Data hosting | HubSpot servers (US) | Your VPS, your jurisdiction |
| API | REST + GraphQL (plan limits) | GraphQL, no request caps |
| Sales pipeline | Yes, customisable | Yes, customisable |
| Automations | Advanced workflows (Professional) | Triggers/actions (maturing) |
| Email marketing | Marketing Hub (add-on) | Not included — third-party tool required |
| GitHub community | Proprietary project | 22,000+ stars, active contributions |
VPS requirements for Twenty CRM
Twenty CRM installs via Docker Compose on any Linux VPS. The prerequisites are deliberately modest for a five-to-ten-person team: 2 vCPU and 4 GB of RAM provide a comfortable baseline for normal daily usage; 4 vCPU and 8 GB of RAM leave headroom for peak load or large imports. Recommended storage is 40 GB minimum for PostgreSQL data, attachments, and logs, with the ability to attach an additional volume later. On the software side, you need Docker Engine 24+ and Docker Compose v2 (the plugin built into Docker, not the standalone Python version), plus a reverse proxy — nginx or Caddy — to terminate TLS. A domain name pointing to the VPS and a valid HTTPS certificate (Let's Encrypt via Certbot or native Caddy) are essential to secure access. TCP ports 80 and 443 must be open inbound; it is not necessary to expose the application ports directly (3000 for the frontend, 3000 for the API) since all traffic flows through the reverse proxy.
Deploy Twenty CRM on a VPS — full procedure
Verify Docker Engine and Compose
Connect to your VPS via SSH and verify that Docker Engine and Docker Compose v2 are installed: docker --version and docker compose version. If Docker is missing, install it via the official get.docker.com script or your distribution's packages.
Download docker-compose.yml
Clone the official Twenty CRM repository or download only the production docker-compose.yml: curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml.
Create .env file
Create a .env file alongside the docker-compose.yml. Set at minimum APP_SECRET (a 64-character random string generated with openssl rand -hex 32), FRONT_DOMAIN (your domain, for example crm.your-domain.com), SERVER_URL (https://crm.your-domain.com), STORAGE_TYPE (local to start), and the database variables if you want to customise PostgreSQL credentials.
Start containers
Start the containers in the background: docker compose up -d. Twenty launches three services: twenty-front (React interface), twenty-server (GraphQL API + backend), and twenty-db (PostgreSQL). Wait about twenty seconds, then confirm all three services are healthy with docker compose ps.
Configure nginx
Configure nginx as a reverse proxy. Create a server block for the domain crm.your-domain.com, with proxy_pass http://localhost:3000 for the frontend. Obtain a Let's Encrypt certificate via certbot --nginx -d crm.your-domain.com and verify that the HTTP-to-HTTPS redirect works.
First launch and wizard setup
Open https://crm.your-domain.com in your browser. Twenty displays a first-run setup wizard: create the administrator account, set your workspace name, and invite the first team members by email.
Set up automatic backups
Set up automatic PostgreSQL backups. The simplest approach is a daily pg_dump script run via cron inside the twenty-db container, with transfer to remote storage (S3-compatible object storage or SFTP). Test a restore before migrating production data.
Update Twenty CRM
Update Twenty by pulling the new image and restarting the services: docker compose pull && docker compose up -d. Twenty applies database migrations automatically at startup.
Exporting your HubSpot data
HubSpot offers a native export from the account settings. Go to Settings → Data Management → Export Data. You can export each object separately: Contacts, Companies, Deals, Activities (calls, emails, meetings). The export produces UTF-8-encoded CSV files, typically delivered by email within minutes of the request. Be aware of several known friction points. Custom property names are exported but may be truncated or normalised in column headers, which complicates mapping to Twenty. Associations between objects (a contact linked to multiple companies, a deal linked to multiple contacts) are not always captured in a single CSV file and may require intermediate processing. Volumetric activity exports (years of email history) can take several hours to generate. Plan for this lead time and trigger the export at least 24 hours before your migration window.
Importing your data into Twenty CRM
Clean HubSpot CSV files
Clean your HubSpot CSV files before importing: remove empty or redundant columns, verify UTF-8 encoding, and normalise date fields to ISO 8601 format (YYYY-MM-DD). A spreadsheet or a tool like Miller (mlr) is sufficient for this step.
Import via Twenty interface
From the Twenty interface, navigate to the target object (People, Companies, or Opportunities), click the CSV import menu, and manually map each source column to the corresponding Twenty field. Twenty validates the mapping before executing the import and flags unrecognised columns.
Respect import order
Import in this order to respect dependencies: Companies first, then Contacts (linked to companies), then Opportunities (linked to contacts and companies). Importing in reverse order creates orphaned records that are difficult to correct later.
Verify imported records
Verify a sample of records after each import: open ten to twenty records at random and compare them with HubSpot to detect truncated fields, missing associations, or incorrectly converted dates.
Recreate pipelines and custom fields
Recreate your pipelines, stages, and custom fields in Twenty before switching the team over: the object configuration interface is accessible from Settings → Data Model. Then invite each team member and assign permissions matching their role.
Run both systems in parallel for one week before switching
Do not shut down HubSpot on the day of the import. Keep both systems active for five to seven business days: ask the team to log new interactions in Twenty while keeping HubSpot accessible in read-only mode to retrieve older history. This overlap surfaces missing workflows, fields you thought were unused but someone checks daily, and automations to recreate. It is also the window to train the team without pressure. At the end of the parallel period, export one final time the week's new data from HubSpot, import the delta into Twenty, and then cancel your HubSpot subscription from the billing settings.
Three-year cost estimate — five-person agency
This cost estimate uses conservative assumptions. On the HubSpot Professional side, the published rate is $100 per seat per month in 2026. For five seats, that is $500 per month, $6,000 per year, and $18,000 over three years — without accounting for future increases or add-on modules. On the self-hosted Twenty CRM side, spending reduces to the VPS cost and, optionally, initial setup time. A 4 vCPU / 8 GB RAM VPS handles a five-to-ten-person team comfortably; check the corresponding configuration in our catalogue for a precise figure. Over three years, gross savings land in a wide range depending on the VPS selected, but the order of magnitude is significant: between $15,000 and $17,000 for a small agency, while retaining full ownership of the data. Add to this the migration cost (a few days of internal work) and the cost of a complementary email marketing tool if your team actively uses HubSpot Marketing Hub. The balance remains strongly positive from the first year for teams whose usage is centred on commercial CRM.
What Twenty CRM does not yet cover
An honest presentation requires naming the current limitations. Twenty CRM is a young project in active development, and some features that HubSpot Professional offers in mature form are not yet available or are still stabilising. Workflow automations work for simple cases (trigger on status change, notification, field update) but do not yet cover complex multi-branch conditional scenarios that HubSpot Workflows allows you to build visually. Integrated email marketing does not exist in Twenty: you will need to connect a dedicated tool (Listmonk, Mautic, Brevo in API mode) via webhooks or the GraphQL API. iOS and Android mobile apps are available but less complete than the web interface; if your sales team works primarily on mobile, evaluate the experience before committing. Finally, automated lead scoring, AI-based sales forecasting, and lead-qualification chatbots are not on the immediate roadmap. These advanced features correspond to use cases that Twenty can cover via third-party integrations, but not natively. For teams whose sales process relies on these automations, migration warrants a serious proof-of-concept phase before any definitive commitment.
Deploy Twenty CRM from the ServOrbit Marketplace
If you prefer to skip the manual configuration described above, our Marketplace offers Twenty CRM as a one-click deployment on VPS. The pre-configured image includes Twenty CRM, PostgreSQL, an nginx reverse proxy, and a Let's Encrypt certificate, with critical environment variables generated automatically at installation. You get a ready-to-use environment in minutes, hosted on our European infrastructure, with full data ownership — no third party has access to your contact database. Updates are at your initiative: you control the timing of version upgrades, without surprises imposed by a SaaS vendor. Our support team is available for integration, backup, or sizing questions as your team grows beyond the initial five people.