Get in touch
  • OpenCart
  • CRM and integrations
  • v1.1.1

KeepinCRM Sync — CRM for OpenCart 2.3, 3.x & 4.x

Free OpenCart integration module for KeepinCRM: an order becomes a deal with the customer, items, price and currency. Open source, no keys or limits.

Compatibility
OpenCart 2.3.0.0 – 2.3.0.2 · 3.0.2 – 3.0.5 · 4.0.2 – 4.1.x
Version
v1.1.1 (OpenCart 4)
v1.1.0 (OpenCart 3.x)
v1.0.0 (OpenCart 2.3)
Updated
August 2026

What the module does

Feature Free
A KeepinCRM deal for every OpenCart order ✔
Customer, items and comment are sent automatically ✔
Choice of trigger statuses ✔
Deduplication and retry queue ✔
Exchange log in the admin panel ✔
Separate builds for OpenCart 2.3, 3.x and 4.x ✔
Free ✔

What it looks like

KeepinCRM Sync settings in the OpenCart admin — API token, status trigger, send moment
The module’s page in the OpenCart admin: the API token (stored encrypted; an empty field on save does not wipe an existing token), the send moment — on placing the order or on the status trigger, a connection-test button and a sync-log button.
Retry limit, source label, cron token and deal routing in KeepinCRM
A retry limit, a source label, an optional cron token to protect the public retry URL, and routing for new deals: pipeline, stage, source and assignee IDs.
KeepinCRM sync log: status, deal ID, attempt count
The sync log: for every order — status, the ID of the deal created in KeepinCRM, the number of attempts, the last error and the update time. The full request body and CRM responses are kept.

Technical requirements

  • OpenCart 4.0.2 – 4.1.x — build cc_keepincrm.ocmod.zip, PHP 7.4 or newer
  • OpenCart 3.0.0 – 3.0.5 — build cc_keepincrm-oc3.ocmod.zip, PHP 5.6 – 8.2
  • OpenCart 2.3.0.0 – 2.3.0.2 — build cc_keepincrm-oc2.ocmod.zip, PHP 5.6 or newer
  • KeepinCRM API token — created in the account: Settings → Company profile → API tab → “Create”
  • OpenCart cron enabled — for automatic retries on failures (the initial send works instantly on the event, without cron)

Version history

v1.1.1 Current August 2026

Deal and line totals are now sent in the order’s currency at its historical rate.

v1.1.0 OC 3 August 2026

The OpenCart 3 build was brought up to the level of 2.3 and 4.x.

v1.0.0 OC 2.3 August 2026

A separate build for OpenCart 2.3.0.0.

All versions (6)
v1.1.0 August 2026

Fixed sending on PHP 7.4: the event handler had a mixed type (PHP 8 syntax), which meant sync didn’t fire at all on 7.4.

v1.0.1 July 2026

Fixed a “silent” event on OpenCart 4.0.2.x.

v1.0.0 July 2026

First public release: creating deals in KeepinCRM (POST /agreements) on placement or by status trigger, idempotent sync log, retry queue via hourly cron, mapping of items/payment/shipping,…

Full module description

KeepinCRM Sync for OpenCart is a module that sends orders from a shop on OpenCart 2.3, 3.x or 4.x into KeepinCRM as deals. When an order is placed (or moves into the chosen status), a deal automatically appears in the CRM with the customer, items with price and currency, and the buyer’s comment. The manager works the request in KeepinCRM while the order is still “hot”, with no copying of data from the OpenCart admin.

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

How it works, step by step

  1. The customer places an order in the OpenCart shop.
  2. The module catches the event of adding order history and fires on placement or on reaching a chosen status.
  3. A deal is built: a client lead (full name, email, phone in +380 format), items as deal lines with price and currency, a comment — and it’s sent to KeepinCRM (POST /agreements on api.keepincrm.com/v1, X-Auth-Token header).
  4. The deal ID is recorded in the sync log. The record per order is unique, so repeated events don’t spawn duplicates — one deal per order, guaranteed.
  5. If KeepinCRM is unavailable — the order stays queued, and OpenCart’s hourly cron retries the send (up to 5 attempts by default).
  6. The admin sees the result in the log: status, deal ID, number of attempts, the last error, and the full request/response body.

How much it costs

Free, open source. Repository on GitHub: catcodestudio/opencart-keepincrm-sync — use it without activations or subscriptions.

Under the hood

  • OC4 event-driven architecture — the module registers an event on adding order history and works without OCMOD patches to core or theme files.
  • Database-level idempotency: a cc_keepincrm_sync log table with a unique key on order_id — duplicate deals are physically ruled out.
  • Retry queue via OpenCart’s built-in cron: the cc_keepincrm_retry task runs hourly and picks up failed sends until the attempt limit is reached.
  • The API token is encrypted before being stored in the database — it isn’t kept in plain text.
  • Full exchange log: the log stores the request body and CRM responses for every order — diagnosing issues without guesswork.

How to install

  1. In the OpenCart admin, open Extensions → Installer and upload cc_keepincrm.ocmod.zip.
  2. In Extensions → Extensions → Modules, find KeepinCRM Sync and click “Install” — the log table, event and cron task are created.
  3. Open the module’s settings and paste the API token from your KeepinCRM account (Settings → Company profile → API tab).
  4. Click the connection-test button — make sure the CRM responds.
  5. Optionally fill in the routing (pipeline, stage, source, assignee), choose the send moment, and save.

Separately for OpenCart 3.x. Upload cc_keepincrm-oc3.ocmod.zip via Extensions → Installer and refresh the modifications. OpenCart 3 has no task scheduler, so retries are set up in the hosting’s crontab — the address is shown in the module’s settings; set a cron token there too, otherwise the address is open to anyone:

curl -s "https://YOUR-SHOP/index.php?route=extension/module/cc_keepincrm/cronRetry&token=TOKEN"

Separately for OpenCart 2.3. The built-in 2.3 Installer only copies files via FTP: if FTP isn’t configured in the shop, unpack cc_keepincrm-oc2.ocmod.zip and upload the contents of the upload/ folder to the shop root, then install the module in Extensions → Modules. 2.3 has no scheduler at all, so retries are set up manually in the system crontab — the address is shown on the “Cron” tab of the module’s settings; set a cron token there too, otherwise the address is open to anyone:

curl -s "https://YOUR-SHOP/index.php?route=extension/module/cc_keepincrm_cron/retry&token=TOKEN"

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 module change OpenCart files, the checkout or the theme?

No. This is an event-driven OC4 extension with no OCMOD patches: checkout and theme stay as they were, and after removing the module the shop runs with no trace of it.

Where do I get the API token?

KeepinCRM account → Settings → Company profile → API tab → "Create". The token is sent in the X-Auth-Token header and stored encrypted.

An order changes status several times — will there be several deals in the CRM?

No. The sync log holds a unique record per order: if the deal is already created, repeated events are skipped.

What happens if KeepinCRM is temporarily unavailable?

The order is created in OpenCart as usual, and the send to the CRM is queued — the hourly cron retries it until it succeeds (up to 5 attempts by default). The error and server response are visible in the log.

Can deals be routed into the right pipeline?

Yes. The settings have optional fields for pipeline, stage, source and assignee IDs — new deals are created with that link straight away.

What happens after the module is deleted?

The event and cron task are removed automatically. The log table is deliberately kept so the sync history isn't lost; it can be removed manually if needed.

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