Get in touch
  • WordPress
  • CRM and integrations
  • v0.2.0

KeepinCRM Sync — CRM for WooCommerce

Free WooCommerce integration plugin for KeepinCRM: a new order becomes a deal with a lead, items and comment. Token stored encrypted, GPLv2.

Compatibility
WordPress 6.2+, WooCommerce 6.0+
PHP
7.4 or newer
Updated
August 2026

What the module does

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 ✔

What it looks like

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.

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).

Version history

v0.2.0 Current August 2026

Protection against double-sending moved to a database-level lock.

v0.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…

Full module description

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.

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.

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.

Questions
about the module

Didn't find the answer? Message us on Telegram and we'll reply within a business day.

@catcode_support Setup, compatibility, activation
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.

Not quite what you are looking for?

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

Order a custom module