ERPNext
Connect your own ERPNext or Frappe instance and push new hires to HR and draft Sales Invoices — live today with your own API token pair.
The ERPNext ATS integration is live in Expertini ATS today. Teams running ERPNext — or any Frappe-based instance — connect with their own API key and secret pair and get two working pushes: accepted hires flow into ERPNext HR as employee records, and client placements create draft Sales Invoices in accounts. It is the open-source ERP answer to the placement-to-invoice and hired-to-onboarded gaps.
ERPNext users tend to run their own infrastructure precisely because they want control, and the integration respects that: your instance URL, your token pair, your data — no middleware in between. The commission figure on each draft invoice comes from Expertini's native Client CRM, which tracks placements and fees as part of the standard subscription. Sign up and connect from the in-app hub.
On this page
- Two live pushes: HR and Sales Invoices
- Built for self-hosted, open-source stacks
- Two-way: customers, employees, and the candidate database
- Everything upstream ships natively
- Connection architecture
- Write semantics and data flow
- Operational considerations
- Placement in the integration topology
- Interface blueprint & interaction flow
- Frequently asked questions
01Two live pushes: HR and Sales Invoices
For in-house hiring, the HR push means a new starter exists in ERPNext the day the offer is accepted — no waiting for someone to re-type the record. For agencies, the invoicing push turns a recorded placement into a draft Sales Invoice carrying the tracked commission, ready for your accounts team to review and submit.
02Built for self-hosted, open-source stacks
Authentication uses ERPNext's standard API key and API secret pair, generated for a user in your own instance, so access is governed by the permissions you grant. Drafts are never auto-submitted: tax templates, naming series, and approval flows stay under your ERPNext configuration.
03Two-way: customers, employees, and the candidate database
Reads are as useful as writes here. Import brings your ERPNext Customers into Expertini's Client CRM as prospect clients — matched by name, safe to re-run — and export creates your ATS clients as Customer records, deduplicated against your instance, so the ERP and the recruiting desk stop drifting apart. "Import your people" reads the Employee doctype into the ATS candidate database, where the same CV parsing and resume scoring that grade applicants apply to your own workforce — internal mobility with actual tooling behind it. Everything is button-triggered, per-run reported, activity-logged, and scoped by the ERPNext permissions of the token pair you issued.
04Everything upstream ships natively
The data being pushed — candidates, offers, placements, commissions — is produced by workflow that ships on every plan: offer PDFs, audit reports, the hiring pipeline, and Client CRM. The ERPNext connector itself is part of the Business plan, with no per-seat fees or usage surcharges on top.
Platform architecture & operations
A1Connection architecture
This is a direct connection to a system you host or key yourself: the form takes your instance URL and credential, verifies them with a live call before anything is saved, and stores secrets encrypted at rest. Connection pages show presence ("connected", "saved ✓"), never the values themselves.
Because the credential is yours, rotation is in your hands: replace the key in your own system, paste the new one here, and the live verification confirms it before the old one is overwritten. Disconnecting removes the stored credential immediately.
A2Write semantics and data flow
Every data movement is an explicit action with a logged result. Writes happen on your click — or automatically only where you enabled a rule (auto-push on hire is off by default, per-provider). Reads — imports of people, accounts, or files — run when you press Import, deduplicate against what you already have (clients by name, people by email), skip rather than overwrite, and report created-versus-skipped honestly, which is why re-running any import is safe by design.
Each action writes a row to the app-activity journal (ats_app_activity): what ran, when, for which record, and the outcome — including the vendor's own error text verbatim when something fails. Usage reporting inside the ATS aggregates that same journal, so integration reporting and integration reality cannot diverge.
Anything that leaves the request path — notification fan-out, webhook delivery, activity journalling, mail — runs in fire-and-forget background threads. A slow external endpoint can never make the interface hang, and a failed side effect is logged rather than silently retried into inconsistency.
A3Operational considerations
Connections are organisation-level and gated to owner and admin roles; recruiters use the features a connection powers but cannot connect, disconnect, or reconfigure. Disconnecting removes stored credentials immediately and stops the dependent features visibly, not silently. Data already imported stays yours and editable.
Imported people arrive marked as imported with conservative privacy defaults — no consent is assumed for anyone who never filled in your application form, and retention defaults apply. Everything written is yours to take: CSV exports and the Data Export app cover the same stores the product itself reads. The exit is as open as the entrance — by design, not concession.
A4Placement in the integration topology
This integration is live in the registry today. One connection per provider unlocks every feature it powers, and the topology grid below shows the neighbouring connectors in the same capability area — statuses come from the same registry that drives the in-app hub, so this page can never claim more than the product does. For anything the catalogue does not cover, Webhooks and Zapier are the generic, documented escape hatch.
Dependency map
Interface blueprint
Interaction flow — states, validations, feedback
Neighbouring connectors — Enterprise Resource Planning
Frequently asked questions
Is the ERPNext integration live?⌄
Does it work with self-hosted Frappe instances?⌄
Are Sales Invoices submitted automatically?⌄
What permissions does the API user need?⌄
At a glance
- Live today — your instance, your API token pair
- Push accepted hires into ERPNext HR
- Import Customers as clients · export clients back — deduplicated
- Employee doctype imports into the scoreable candidate database
- Draft Sales Invoices for client placements
- Works with ERPNext and Frappe-based instances
- Drafts only — your approval workflow is untouched
- No middleware, no integration surcharge
See erpnext on your own hiring.
Bring a real job description to a 30-minute demo — free trial included.
Book a demo