The challenge
A business using SnelStart accounting was preparing invoices by hand from its monday.com board, and every invoice depended on customer and product records that had to exist in SnelStart first.
The jobs, customers and billable items already lived on a Dutch-language monday.com board called “Factuur”. Each item had its customer in a “Klant” column and the products or services as subitems. To bill one job, someone had to read the board, check the customer existed in SnelStart, check every article existed, and then type the invoice. A first-time customer meant creating the relation before anything else. A new service meant creating the article first.
SnelStart adds its own rules. Its API is in Dutch. Every call needs an access token, requested with a client key, and that token expires in one hour, 3599 seconds. The goal in the project brief was plain: automate invoice creation from the monday.com item and subitem data, push it to SnelStart through the API, and cut manual effort and errors.
What we built
Amatec built a Make.com scenario that turns one status change on monday.com into a draft invoice in SnelStart, and repairs missing customers and products along the way instead of failing.
- Trigger: the Status column changes to “Factuur maken” (Create Invoice). A filter makes sure no other status starts a run.
- Data: the scenario pulls the item, its subitems and the linked customer, including the customer’s email from the “Klant” column.
- Login: it requests a fresh SnelStart access token with the client key on every run, so an expired token never blocks an invoice.
- Customer lookup: it searches SnelStart relations by email and picks up the internal customer ID.
Line items are handled one at a time. The scenario loops through each subitem, skips any with a blank name or description, and searches SnelStart’s article list (Artikels) by description. If the article is missing, it creates it, using the code stored on the monday.com item and choosing the revenue group (omzetgroep) from a column on the board.
If the article already exists, the create step throws an error because the code is taken. A Resume error handler catches it and the run carries on. Known products pass straight through, new ones get created, and nobody has to tell the scenario which is which.
The processed lines are then grouped back into one array, formatted as the JSON SnelStart expects and posted as a sales order (verkooporder). The process status is hardcoded to “Bevestiging” so the invoice lands as a draft, and VAT is entered as exclusive.
The error handlers are the clever part. They fix the cause of the error and resume the run.
- Missing customer: the invoice payload only fills the customer ID when SnelStart says the relation type is “Klant”. Otherwise the field is left blank on purpose, which forces a “Bad Request”. The handler catches it, creates the customer in SnelStart from the monday.com data, and resumes from the Create Invoice step with the new customer ID.
- Internal Server Error: this usually means the mandatory send_email field is missing or set to False. The handler sets it to True and resumes.
So a new customer or a new service never stops billing. The scenario does the set-up a person would have done, then finishes the invoice.
The results
The project documents near 100% process continuity: draft invoices keep flowing into SnelStart even when the customer or product is new.
- Invoice creation without manual input, started by one status change.
- Missing customer records handled automatically, with the invoice step retried using the new customer ID.
- Data accuracy ensured by filtering out incomplete articles before they reach the invoice.
- Reduced turnaround time for the billing process.
- A working integration with SnelStart’s Dutch-language API.
For the team, billing is now a status change on a board they already use. The draft appears in SnelStart with one line per valid subitem, ready to check. Nobody re-types customer details or product codes, and half-filled subitems stay off the invoice.
The same pattern suits any accounting tool with an API and strict master data. Look the record up. Create it if it is missing. Let an error handler resume the run rather than end it.