Zapier connector
Zapier is the Swiss-army knife of no-code integrations — connecting Google Forms, Calendly, Slack, Mailchimp, Notion, Airtable, and ~6,000 other apps to each other. The Solid Accounting Zapier connector exposes most of Solid's API as Zapier triggers and actions, so you can wire up automations without writing code.
What's in the connector
Triggers (events Solid can emit to Zapier)
| Trigger | When it fires |
|---|---|
| New invoice posted | Every time an invoice posts |
| New bill posted | Every time a bill posts |
| Payment received | Every time a Receive Payment posts |
| Customer created | Every time a new customer is added |
| Vendor created | Every time a new vendor is added |
| Period closed | Every time a fiscal period closes |
| Reconciliation completed | Every bank reconciliation |
Actions (things Zapier can do in Solid)
| Action | Purpose |
|---|---|
| Create customer | New customer record |
| Create vendor | New vendor record |
| Create invoice | New invoice |
| Create bill | New bill |
| Apply payment | Receive Payment, applied to one or more invoices |
| Pay bill | Pay Bill, applied to one or more bills |
| Find customer by email | Look up to use in subsequent actions |
| Find invoice by external ID | Idempotent re-imports |
Searches (lookup-only, for branching logic)
| Search | Purpose |
|---|---|
| Find customer | By name, email, or external ID |
| Find vendor | Same |
| Get account balance | For "if balance over X..." automations |
Common Zaps
Google Form → New customer in Solid
A signup form on your website creates a customer record automatically.
Trigger: Google Forms → New form response
Filter: (form is your "New customer signup" form)
Action: Solid Accounting → Create customer
Map: display_name = form's "Company name" field
email = form's "Email" field
phone = form's "Phone" field
external_id = "google_form_" + form's response ID (for idempotency)
This Zap fires every time someone fills out the form. Solid gets the new customer; you don't paste anything.
Calendly booking → New customer + invoice draft
A consultation booking creates the customer (if new) and a draft invoice for the booked time.
Trigger: Calendly → New invitee
Action 1: Solid Accounting → Find customer by email
Action 2: Filter — only continue if customer not found
Action 3: Solid Accounting → Create customer
display_name = invitee name
email = invitee email
Action 4: Solid Accounting → Create invoice (draft)
customer_id = (from Action 1 if found, else Action 3)
date = today
status = draft
lines = [{description: "Consultation — " + event name,
amount_cents: based on event type,
account_id: your Service Income account}]
The invoice sits in draft status; you review and post manually after the meeting actually happens.
Stripe Atlas / new business → Set up Solid file
For accountants who onboard new clients regularly, a Stripe Atlas (or similar) signup can pre-populate the client's Solid file.
Trigger: Stripe Atlas → New customer (or your onboarding form)
Action 1: Solid Accounting → Create customer
Action 2: Slack → Send message to your team channel: "New client {name} created in Solid"
Less ambitious than a full file-creation flow, but cuts the manual step.
Mailchimp opt-in → Welcome email + customer record
A new email subscriber becomes a Solid customer (so you can follow up with offers / invoices later).
Trigger: Mailchimp → New subscriber
Filter: Tag includes "qualified-lead"
Action: Solid Accounting → Create customer
Map: display_name = first + last name
email = subscriber email
external_id = "mailchimp_" + Mailchimp subscriber ID
How auth works
The Zapier connector authenticates against your Solid API the same way every other API client does — via your X-API-Key header.
To set it up the first time in Zapier:
- Pick a Solid Accounting trigger or action in your Zap
- Zapier prompts to Connect Solid Accounting
- Enter your API base URL (e.g.
https://your-solid.example.com/api/v1— not the localhost URL since Zapier hits it from their cloud) - Enter your API key
- Zapier validates by calling
/auth/me— confirms the key works
After connection, the same auth is used for every action and trigger in every Zap.
Network requirements
Zapier hits your API from their cloud — the localhost-only default won't work. You need:
- A reverse proxy with a public hostname (e.g.
solid.acme.com) terminating TLS and proxying tolocalhost:21384 - The proxy IP-allowlisted to Zapier's servers if you want defense-in-depth (Zapier publishes their egress IP ranges)
- Or a tunnel via Cloudflare Tunnel, Tailscale Funnel, ngrok — same idea, different vendor
For testing, ngrok is the fastest path:
ngrok http 21384
# Use the ngrok URL as your API base in Zapier's connection stepDon't run ngrok permanently for production; pick a stable hostname.
Idempotency in Zapier
Zaps re-fire on errors. Without idempotency, an error during your Solid create can cause duplicates on retry. Solution: use external_id on every create:
- For Stripe-driven Zaps:
stripe_charge_<charge_id> - For Google Form Zaps:
google_form_<response_id> - For Calendly Zaps:
calendly_<event_id>
Even if Zapier retries 3 times, the external_id lookup finds the existing record on attempts 2 and 3 and does nothing.
Custom integrations beyond Zapier
If Zapier doesn't have a connector for the third-party system you need, you can:
- Build a custom Zap action with Zapier's webhooks-by-Zapier feature, posting to your Solid API directly
- Use Make (formerly Integromat) — similar concept; has a Solid Accounting module
- Write a small custom service — see the Stripe recipe for the pattern
When Zapier isn't the right tool
For high-volume, low-latency, mission-critical flows, Zapier's per-zap-per-month cost adds up and the ~5-minute polling interval (for non-instant Zaps) is too slow. Build a custom service in those cases:
- More than ~1,000 events per month
- Latency requirements under 1 minute
- Complex branching logic that exceeds Zapier's filter capabilities
- High-stakes accuracy requirements (better testability with code than with no-code)
For everything else, Zapier is the cheapest path. A small business with 50 form submissions a month and 10 Calendly bookings can run the whole integration on Zapier's free or starter tier.
Cross-references
- REST API — endpoints the connector wraps
- Stripe → Solid Accounting — code-driven integration as an alternative
- Audit Log — every Zapier-driven write is logged with the API key's user identity