Odoo and Paylocity integration
Odoo runs your purchasing, inventory, and finance. Paylocity runs payroll and HR for your US workforce. Connecting the two keeps employee records and payroll GL in sync. New hires and terminations in Paylocity flow into Odoo, and payroll journals post into Odoo's general ledger after each pay run without manual entry. ml-connector bridges the very different APIs and keeps both systems in agreement throughout the pay cycle.
What moves between them
The primary flow is from Paylocity into Odoo. After each payroll run, ml-connector reads Paylocity payroll processed events and fetches the full pay statement and earnings details, then posts the labor cost totals into Odoo's general ledger accounts. Employee records flow both directions: new hires and terminations in Paylocity trigger Odoo employee creates or termination records, while active employees are periodically synced to keep role and department data current. Reference data such as work locations and pay grades are aligned so Odoo has a current directory of your workforce.
How ml-connector handles it
ml-connector stores both Odoo API key and Paylocity client credentials encrypted. For Odoo, it uses the api_key authentication method (recommended for Odoo 14+) and respects the XML-RPC or JSON-2 protocol available in your instance. For Paylocity, it exchanges the client_secret for an OAuth2 Bearer token before each request window and handles token refresh when calls return 401. ml-connector polls Odoo employees and GL accounts on a daily or weekly cadence, using write_date filters to fetch only changed records since the last run. It subscribes to Paylocity webhook events for immediate employee changes and payroll completion, and also polls as a backup in case an event webhook is missed or delayed. Payroll journals are mapped to the matching Odoo GL accounts before posting, and every record carries a full audit trail so a failed downstream call can be replayed without duplication.
A real-world example
A mid-sized US services firm runs Odoo for accounting and procurement, and Paylocity for payroll and benefits across two offices. Before the integration, payroll journal entries were exported from Paylocity as CSV and manually re-entered into Odoo's general ledger each month, a process that introduced keying errors and delayed month-end close. Employee changes in Paylocity were not reflected in Odoo, so the HR directory was out of sync and POs sometimes went to terminated employees. With Odoo and Paylocity connected, payroll GL posts automatically after each run, mapped to the correct GL accounts, and employee hires and terminations sync in minutes rather than weeks. Month-end close is faster and payroll data is always current.
What you can do
- Sync new hires and terminations from Paylocity into Odoo employee records and update active employee data automatically.
- Post Paylocity payroll GL entries into Odoo's general ledger after each pay run, mapped to the correct accounts.
- Handle Odoo API key authentication and Paylocity OAuth2 token management with automatic token refresh.
- Subscribe to Paylocity webhook events for immediate employee and payroll changes, with polling as a backup.
- Track every record in a full audit trail and replay failed GL postings without duplication.
Questions
- What authentication does ml-connector use for Odoo and Paylocity?
- For Odoo, ml-connector uses API key authentication (recommended for Odoo 14 and later) paired with your username. For Paylocity, it uses OAuth2 client credentials to obtain a Bearer token before each request, handling token refresh automatically when needed. Both credential sets are stored encrypted.
- Does the integration rely on webhooks or polling?
- ml-connector uses both. It subscribes to Paylocity webhook events for immediate employee and payroll changes, which are usually delivered within minutes. It also polls both Odoo and Paylocity on a regular schedule as a backup, ensuring no changes are missed if a webhook delivery fails or is delayed.
- How does ml-connector avoid duplicate payroll GL postings in Odoo?
- Every record, including GL postings, carries a unique identifier and audit trail. ml-connector checks the audit log before posting, and if a GL entry for a pay run already exists, it skips the duplicate. If a posting fails midway, the audit record allows the full flow to be replayed safely on the next cycle.
Related integrations
More Odoo integrations
Other systems that connect to Paylocity
Connect Odoo and Paylocity
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started