Connecting Sellsy to n8n: automating quote follow-ups and invoicing
Published 2 September 2026 · 5 min read
A quote sent from Sellsy that sits unanswered for three weeks, a deal marked "won" in the CRM with nobody remembering to raise the invoice before month-end: these are quiet losses, invisible until you add them up. Sellsy remains one of the most widely used sales and billing tools among French-speaking SMEs and freelancers — CRM, quotes, invoices and cash flow in a single interface — but nothing on the product side follows up a quote for you, or warns the team the moment a deal crosses over into billing. A 2024 study by Wu, Botella-Carrubi and Blanco-González-Tejero published in Technological Forecasting and Social Change ("The empirical study of digital marketing strategy and performance in small and medium-sized enterprises", see on Google Scholar), surveying 148 SMEs, shows that adopting structured digital tools has a measurable effect on organizational performance — provided adoption doesn't stop at buying the software. A CRM holding the right data but wired to nothing else leaves most of its value on the table. n8n closes exactly that gap between Sellsy and the rest of your stack.
Generating an API v2 access
Sellsy exposes an OAuth2-authenticated API v2. The whole process happens from the interface, with no external approval needed for internal use:
- In Sellsy: Menu → Settings → Developer Portal, the API V2 tab.
- Create a Personal access (to automate your own account) or Private access (for an integration serving an organization — for instance an agency managing several Sellsy accounts, as covered in our guide on hosting n8n for a multi-client agency).
- Grab the generated Client ID and Client Secret — these authenticate n8n, never your Sellsy email or password.
The API v2 responds on https://api.sellsy.com, and OAuth2 authorization is negotiated on https://login.sellsy.com. Note that API v2 hasn't yet caught up with every feature of API v1: for everyday use (contacts, opportunities, quotes) it's more than enough, but Sellsy documents a bridge to call certain v1 endpoints from a v2 access when a specific need isn't covered yet.
Setting up the OAuth2 credential in n8n
Create an OAuth2 API credential in n8n:
- Grant Type: Client Credentials.
- Access Token URL: the token endpoint exposed under
https://login.sellsy.com. - Client ID / Client Secret: the ones generated in the Developer Portal.
- Scope: enable only what the workflow needs —
contacts.read,companies.read,opportunities.readfor reading, adding the matching write scopes only if the workflow needs to create or update records. An unused scope is nothing but unnecessary attack surface.
Once the credential validates, every HTTP Request node in the workflow reuses it to query the API's resources: contacts, companies, opportunities and estimates (quotes). For paginating large lists (every quote from a given quarter, say), follow the principles in our guide to pagination with the HTTP Request node, and set up a retry policy for network errors as described in our guide to HTTP Request retries and timeouts.
Use case 1: automatically following up unanswered quotes
The most cost-effective workflow to build is also the simplest:
- A daily Schedule Trigger queries the quotes resource, filtered on status (sent, no response) and a send date older than a configurable threshold (7, 14, 21 days).
- Filter out duplicates: before sending a follow-up, check a tracking table (Supabase, Airtable, or a plain tag applied to the quote in Sellsy) to confirm this quote hasn't already been followed up recently — skip this and a shifted Cron time or a manual re-run sends the same email twice, exactly the idempotence problem covered in our guide to duplicate webhook deliveries.
- Generate a personalized follow-up with an AI node that pulls in the quote's context (amount, product, contact name) rather than a generic template — the same principle detailed in our guide to personalizing B2B outreach emails with AI, carried over from first contact to sales follow-up.
- Send via a Send Email node or, for a more visible nudge, notify the responsible salesperson in Slack so they send the message themselves rather than automating everything — useful when the client relationship deserves a human touch AI shouldn't replace.
Use case 2: notifying and pre-billing a won opportunity
When an opportunity flips to "won" status in the CRM, two things should happen immediately, not at month-end during a sales review:
- A Schedule Trigger (or a webhook, if your Sellsy organization exposes one on the status-change event) detects the move to "won" and notifies the billing team in Slack or Teams with the amount and contact involved.
- An IF node checks whether a matching quote already exists for that opportunity: if so, the workflow prepares the data needed to convert it into an invoice; if not, it creates a task for a salesperson to complete the file before conversion.
- The whole chain — quote, win date, who approved the invoice conversion — gets logged, following the same model as an AML-grade audit trail with n8n and Supabase: useful in case of a commercial dispute, and essential if your business is subject to a compliance review, as covered in our guide to automating DORA compliance.
For generating the final document (a quote or invoice as a PDF, outside Sellsy's CRM scope), our dedicated guide to generating quotes and invoices as PDF with n8n covers building the document from the structured data retrieved here.
Respecting the API's rate limits
Like any SaaS API, Sellsy's enforces rate limits per organization. A workflow that loops through several hundred quotes checking their status one by one will eventually hit a 429. Space out calls with a Wait node, batch requests where the endpoint allows it, and follow the general principles in our guide to rate limiting APIs in n8n. Wire an Error Workflow into these sales automations without fail: a quote follow-up that fails silently for two weeks costs more than no follow-up at all, since it creates the misleading impression that someone is on top of it.
Securing the Client Secret
Sellsy's Client Secret grants access to the organization's commercial and financial data: contacts, negotiated amounts, deal history. Store it exclusively in n8n's encrypted OAuth2 credential, never in a Set node or a variable shared with other workflows, following the principles in our guide to securing API credentials. If you suspect a leak, regenerate the access from the Developer Portal: the old secret is revoked immediately.
Where to go from here
This pipeline closes the loop between the sales CRM and billing without re-typing or a forgotten follow-up. If your accounting runs on a tool separate from Sellsy for invoicing and bank reconciliation, our guide to connecting Pennylane to n8n pairs naturally with this workflow. For a full audit trail of every commercial decision (who approved what, and when), the Compliance & Audit Pack (€149) ships the Supabase logging building block ready to wire in alongside these API calls; and if your incoming leads arrive by email before reaching the CRM, the Inbox AI Pack (€79) handles their initial triage. All three packs, bundled in the FlowKit Complete Bundle (€269 instead of €347 bought separately), cover the entire sales journey, from lead intake to invoicing.
FAQ
Frequently asked questions
Is there a native n8n node for Sellsy?
No, n8n does not ship a dedicated Sellsy node. The integration runs through the HTTP Request node paired with an OAuth2 credential, the same pattern used for most mid-sized SaaS tools without a first-party node (Qonto, Pennylane, Payfit). It takes longer to set up than a native node, but is just as reliable once the credential is in place.
Do I need Sellsy's API v1 or v2 for this kind of workflow?
API v2, authenticated with OAuth2, covers the essentials for this use case: contacts, opportunities and estimates (quotes). Some older invoicing features are still v1-only for now; Sellsy documents a bridge to call certain v1 endpoints from a v2 access, to enable scope by scope as needed.
How do I avoid following up on the same quote twice?
Don't rely solely on the Schedule Trigger's window: log the date of the last follow-up in a table (Supabase, Airtable, or even a tag on the quote in Sellsy) and filter on it before sending. It's the same idempotence principle as handling a duplicate webhook delivery, covered in our dedicated guide.
How do I secure the Sellsy Client ID and Client Secret in n8n?
Create them from Sellsy's Developer Portal and store them exclusively in an n8n credential of type OAuth2, never hardcoded in a Set node or a variable shared with other workflows. If you suspect a leak, regenerate the access from the Developer Portal: the old secret is revoked immediately for every integration using it.
Bundle FlowKit Complet
€269