Synci.io Integration — Automatic Bank Sync into Freenance
Connect any of 2,500+ European banks to Freenance using Synci.io's PSD2 webhook. Step-by-step setup guide, security notes, and troubleshooting for the Synci.io integration.
Automatic Bank Sync via Synci.io
Synci.io is a regulated PSD2 aggregator with read-only access to 2,500+ banks across 31 European countries, including every major Polish, German, French, Italian, Dutch, and Spanish institution. Freenance integrates with Synci.io as a webhook destination — every transaction Synci syncs from your bank lands in Freenance automatically as an expense or earning.
You pay Synci their own subscription — see synci.io/pricing for the current plans and pricing. Freenance does not charge extra for the integration itself; it's available on every paid Freenance tier (Enthusiast Investor and up). Synci.io handles the PSD2 consent flow, the bank's authentication, the periodic sync, and re-consent reminders. Freenance just receives the transactions.
Why Synci.io Instead of Direct Bank Integration?
Direct PSD2 integrations (Enable Banking, GoCardless, Plaid) charge personal-finance apps several euros per user per month, which would force Freenance to either raise prices significantly or restrict bank sync to the highest tier. By delegating the PSD2 flow to Synci.io — which sells direct to end users — Freenance keeps the cost on the side of users who actually want bank sync, instead of bundling it into everyone's subscription.
The trade-off: setup is two steps instead of one (subscribe to Synci, then paste a URL into Freenance). The benefit: Synci's pricing is meaningfully lower than direct integrations, the bank list is broader than most direct providers, and you keep a single PSD2 consent across whatever tools you want to feed (Sheets, YNAB, Lunch Money, and now Freenance).
What Data Is Imported?
Synci.io's webhook delivers booked bank transactions — settled debits and credits — at a cadence that depends on the Synci plan you pick. Freenance maps each transaction:
| Synci field | Freenance result | Notes |
|---|---|---|
Negative amount or direction=DEBIT |
Expense row | Currency from payload, falls back to user default |
Positive amount or direction=CREDIT |
Earning row | Same currency rules |
category (if Synci enriched) |
Best-effort match against your categories | Falls back to "Imported from Synci" |
transfer=true (Synci flag) |
Skipped, counted in audit | Internal transfers don't pollute reports |
| Re-delivery of the same event | Idempotent — no duplicate row | Matched on Synci event ID |
Every webhook delivery is logged in Configuration → Synci.io → Recent events with status (Created / Duplicate / Transfer skipped / Excluded / Unauthorized / Failed) and a Categorization badge (Pending / Done / Failed) showing whether AI categorization succeeded — so you can verify the pipeline at a glance.
Each delivery is HMAC-verified: Synci signs every payload with the whsec_… secret you set up in Step 4 below, and Freenance rejects any delivery whose signature doesn't match.
Setup Walkthrough
Step 1: Subscribe to Synci.io
Visit synci.io/pricing and pick a plan. Synci's cheapest paid tier is enough to forward transactions to Freenance — pricing, sync cadence, webhook-endpoint counts, and any value-add features (category enrichment, etc.) are described in their pricing page and may change over time, so we link to it rather than re-quoting here. Anything you set inside Synci will simply work on the Freenance end — we just receive whatever they push.
Step 2: Connect Your Bank in Synci
Inside Synci's UI, click Add bank, pick your bank from the searchable list, and complete the PSD2 consent flow on your bank's website (typically a redirect, biometric login, and a confirmation prompt). PSD2 consents are valid for 90 days — Synci sends you re-consent reminders, no action needed from Freenance.
Step 3: Enable Freenance and Copy the Webhook URL
Sign in to Freenance at freenance.io, open Configuration → Integrations, click the Synci.io tile, and click Enable Synci.io integration — Freenance generates a webhook URL of the form https://api.freenance.io/core/synci/webhook/{token}. Copy it.
Step 4: Add Freenance as a Synci Custom Webhook Destination
Back inside Synci, go to Destinations → Add destination → Custom webhook, paste the Freenance URL, and save. Synci will then reveal a whsec_… signing secret — this is the value Synci uses to HMAC-sign every payload it delivers to you.
Copy the whsec_… secret, return to Freenance's Synci.io page, paste it into the Synci signing secret field, and click Save secret. Freenance stores it AES-encrypted at rest and uses it to verify every incoming delivery before importing transactions.
Step 5: Verify
Synci runs its first sync at whatever cadence the plan you picked uses. Open Configuration → Synci.io and check the Recent events table — you should see rows with status Created and the AI Categorization column flipping from Pending to Done within a few seconds of arrival (assuming you have AI categorization enabled in your bank-import settings). Open the Expenses and Earnings screens to see the new entries. Done.
AI Categorization
When transactions arrive via Synci, Freenance runs them through the same AI categorization pipeline used by the bank-statement importer. The categorization reads your existing AI settings (toggle, prompt tips, exclude patterns) — configured globally inside Configuration → Synci.io → Open AI settings (or under Configuration → Bank Import), they apply to every import source: CSV, MT940, YNAB, and Synci.
Excluded transactions (matching any of your exclude patterns by case-insensitive substring against the description) never become an expense or earning row — they're audited as Excluded in the events table so you can verify your patterns are doing what you expect.
Security
Every Synci delivery is verified by HMAC-SHA256 against your stored whsec_… secret. A signature mismatch → 401 + an Unauthorized audit row in the events table. The secret is stored in Freenance AES-256-GCM encrypted at rest — even a database leak won't expose it.
Rotate the URL token any time from the Synci.io page in Freenance — generates a new URL (you must update Synci's destination config); the signing secret stays bound to the destination on Synci's side, so you don't need to re-paste it unless you also rotate it on Synci's side.
Synci.io itself never stores your bank login credentials — that's a PSD2 hard requirement. They issue and refresh OAuth-style access tokens against your bank's regulated PSD2 API, with all data encrypted at rest and in transit.
Troubleshooting
No events appearing: open the Recent events table. If it's empty, check Synci's destination config — the URL must include /core/synci/webhook/<your-token> exactly. If the table shows rows with status Unauthorized, your whsec_… secret in Freenance doesn't match the one Synci is signing with — paste the current whsec_… from your Synci destination dialog into Freenance again.
Events appear with status Failed: Synci sent a transaction in a shape we couldn't map. The error_message column on the audit row tells you what was missing. The integration team monitors these — let us know via contact and we'll patch the mapper.
Stale-warning banner ("no events in 7 days"): PSD2 consents expire after 90 days. Synci sends you a re-consent reminder; renew it inside Synci.io. Once the bank consent is renewed, the next Synci sync will resume webhook deliveries.
Transaction landed in the wrong category: each row in Expenses / Earnings is editable — change the category like any other entry. Future Synci events from the same payee will use your stored category if it matches by name.
FAQ
Does Synci.io support my bank?: yes if your bank is in the EU/EEA — 2,500+ banks across 31 countries. Polish coverage includes mBank, ING, PKO BP, Santander Bank Polska, Millennium, Alior, Pekao, Credit Agricole, Citi, BNP Paribas, Velo, Nest, and most smaller institutions.
What does it cost?: see synci.io/pricing for Synci's current plans (billed by Synci, not Freenance). One Synci subscription connects one bank; multi-bank users buy multiple connections. Freenance itself doesn't surcharge the integration on top of your existing paid tier.
What tier do I need on Freenance?: Enthusiast Investor and up. The integration is included on every paid tier — there's no surcharge once you're on a paid plan.
Can I run Synci → Freenance and Synci → Sheets at the same time?: yes. Synci supports multiple webhook destinations per bank connection on their paid plans (see their pricing for current details). Add Freenance as one destination, Sheets as another — Synci fans out to both.
Will it import historical transactions?: Synci pushes from the connection date forward by default; you can configure transfer_start_date inside Synci to import older history if your bank exposes it via PSD2. Freenance dedupes against transactions already imported via YNAB CSV or other sources, so re-import is safe.
Want full control over your finances?
Try Freenance for free