Get in touch
CRM and integrations · WordPress

KeepinCRM Sync — CRM for WooCommerce

Автоматична передача замовлень WooCommerce у CRM KeepinCRM: угода створюється одразу після checkout з клієнтом-лідом, товарами та коментарем. Дедуплікація, повторні спроби, метабокс статусу й журнал синхронізації.

Version
v0.2.0
Compatibility
WordPress 6.2+, WooCommerce 6.0+
Platform
WordPress
KeepinCRM Sync — CRM for WooCommerce

What each licence includes

Feature Free
A KeepinCRM deal is created for every new WooCommerce order
The customer is added as a lead: full name, email, phone
Order items become deal lines
The buyer's comment reaches the CRM
Supports both the classic checkout and Checkout Blocks
Deduplication and retries on failure
Exchange log and metabox on the order
HPOS compatible
Free

KeepinCRM Sync for WooCommerce is a plugin that automatically creates a deal in KeepinCRM for every new WooCommerce order. The customer is added as a lead with full name, email and phone, items become deal lines, and the buyer’s comment reaches the CRM — the manager immediately works the request instead of retyping it from the site admin. Works with both the classic checkout and Checkout Blocks.

The plugin is completely free, and the code is open. Download it from GitHub: github.com/catcodestudio/wp-keepincrm-sync. GPLv2 licence — no keys, subscriptions or order limits.

What the admin gets

KeepinCRM Sync settings for WooCommerce — API token, CRM routing, trigger statuses
The WooCommerce → KeepinCRM Sync page: the API token (stored encrypted and never returned to the form), optional routing — pipeline, stage, source and assignee IDs, and the send moment by status. The “Test connection” button makes a live GET /clients/statuses request.
KeepinCRM sync log: date, order, event, attempt, HTTP code and CRM message
The “Log” tab — the latest sync attempts: deal creation, updates, scheduled retries and errors with the CRM’s response as-is. You can see both the HTTP code and the attempt number, so it’s clear whether the request got through.
KeepinCRM metabox on a WooCommerce order: sync status, deal ID and resend button
The metabox on every order: sync status, the KeepinCRM deal ID, send time, and a “Resend” button — for an already-synced order it updates the deal (PATCH) rather than creating a second one.

How it works, step by step

  1. The customer places an order — the plugin reacts right after checkout or when the order moves into one of the chosen statuses.
  2. A deal is assembled: a client lead (full name, email, phone in +380 format), items as deal lines (jobs) with price and quantity, the total, a comment. For orders paid online, an optional “Paid online” note is added.
  3. The data is sent to KeepinCRM via the REST API — POST /agreements with an X-Auth-Token header.
  4. The CRM returns a deal ID — it is stored in the order meta (_cc_keepincrm_agreement_id). A repeated event won’t create a second deal.
  5. On a CRM failure, the plugin retries the send itself: 3 attempts with 5 min / 30 min / 2 h delays via WP-Cron.
  6. The manager sees the result in the order metabox and in the “Log” tab on the settings page.

How much it costs

Free, open source. Repository on GitHub: catcodestudio/wp-keepincrm-sync — GPLv2 licence, use it without restrictions.

Technical requirements

  • WordPress 6.2+ (tested up to 7.0)
  • WooCommerce 6.0 or newer, including HPOS (custom order tables)
  • PHP 7.4+
  • KeepinCRM API token — created in the account: Settings → Company profile → API tab (account owner only). Note: KeepinCRM only exposes the API on a paid plan — on the free plan any request returns “Not available on the free plan” (HTTP 402).

Under the hood

  • API token encrypted in the database — libsodium with an HMAC fallback for hosts without the sodium extension.
  • Protection against double-sending — besides the order meta, the plugin takes a database-level lock, so checkout, a status change and a payment callback arriving at once won’t create two deals.
  • Deduplication via the stored deal ID: before creating one, the plugin checks the order meta — resending updates the existing deal (PATCH /agreements/{id}) instead of creating a new one.
  • HPOS compatibility — orders are handled only through WC_Order CRUD, with no direct SQL on posts.
  • Phone normalisation to E.164 (+380…) before sending to the CRM.
  • Developer hooks: the cc_keepincrm_order_payload filter (change the deal body) and the cc_keepincrm_order_sent action (react to a successful send).

How to install

  1. Download catcode-order-sync-with-keepincrm-for-woocommerce-0.2.0.zip and install via Plugins → Add New → Upload Plugin.
  2. Activate it in the “Plugins” menu.
  3. Open WooCommerce → KeepinCRM Sync and paste the API token from your KeepinCRM account (Settings → Company profile → API tab).
  4. Click “Test connection” — make sure the CRM responds.
  5. Optionally fill in the routing (pipeline, stage, source, assignee) and choose the send moment. Save — done.

Version history

0.2.0 — August 2026
Protection against double-sending moved to a database-level lock: previously it was a transient (read-then-write), and two simultaneous hooks could create two deals. Fixed the “Resend” button in the metabox — it was a form nested inside the order form, so the browser discarded it and resending didn’t fire. Deleting the plugin now also removes the log table. An unanswered attempt from the CRM (timeout) is now marked as no_response with a warning on the order. The interface has moved to English with a bundled Ukrainian translation, and the plugin was renamed for wp.org (slug catcode-order-sync-with-keepincrm-for-woocommerce) — settings, order meta and the log table kept their old names, so no migration is needed.
0.1.0 — July 2026
First public release: creating deals in KeepinCRM (POST /agreements) after checkout or by status trigger, a client lead with item lines, routing by pipeline/stage/source/assignee, retries via WP-Cron, order metabox, event log, connection test, token encryption, HPOS compatibility.

Frequently asked questions

Does the plugin touch the checkout or the theme?

No. It only listens to WooCommerce order events and sends data to the CRM in the background. The checkout markup and theme templates are not changed.

Where do I get a KeepinCRM API token?

KeepinCRM account → Settings → Company profile → API tab (account owner only). The token is sent in the X-Auth-Token header and stored encrypted in the database.

An order passed through several statuses — will there be several deals?

No. The deal ID is stored in the order meta, and the plugin takes a database-level lock before sending: a repeated event will update the existing deal rather than creating a duplicate.

What does the "Resend" button in the metabox do?

If the order isn't in the CRM yet — it creates a deal (POST /agreements). If it was already sent — it updates it with current data via PATCH /agreements/{id}.

Can deals be routed into a specific pipeline?

Yes. The settings have optional fields: pipeline, stage, source and assignee IDs — deals will be created with that link straight away.

What happens after the plugin is deleted?

Deletion (not deactivation) removes the settings with the encrypted token and the log table. Deal IDs on orders are deliberately kept — they're exactly what stops a reinstall from creating a second copy of an old order in the CRM.

The CRM says "Not available on the free plan" — what do I do?

That's KeepinCRM's own response (HTTP 402), not a plugin error: the API is only available on a paid plan. Subscribe to a plan or trial in the account and repeat the connection test.

What if the CRM doesn't respond at all (timeout)?

KeepinCRM has no external ID on deals, so the plugin can't ask whether the request got through. Such an attempt is marked in the log as no_response and shows a warning in the order metabox — it's worth checking the CRM before resending.

Questions about the module?

Message us on Telegram — we reply within the working day. We will help with setup, compatibility and key activation.

@catcode_support

Not quite what you are looking for?

We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about your task and we will prepare an estimate.

Order a custom module