Get in touch
CRM and integrations · OpenCart

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

Автоматична передача замовлень OpenCart 2.3, 3.x і 4.x у CRM KeepinCRM: угода створюється при оформленні з клієнтом, товарами та коментарем. Ідемпотентність, повторні спроби через cron, журнал синхронізації.

Version
v1.1.1 (OpenCart 4)
v1.1.0 (OpenCart 3.x)
v1.0.0 (OpenCart 2.3)
Compatibility
OpenCart 2.3.0.0 – 2.3.0.2 · 3.0.2 – 3.0.5 · 4.0.2 – 4.1.x
Platform
OpenCart
KeepinCRM Sync — CRM for OpenCart 2.3, 3.x & 4.x

What each licence includes

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

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.

What the admin gets

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.

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.

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)

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"

Version history

1.1.1 — August 2026
Deal and line totals are now sent in the order’s currency at its historical rate — previously the CRM received figures in the shop’s base currency next to the order currency’s code.
1.1.0 (OpenCart 3) — August 2026
The OpenCart 3 build was brought up to the level of 2.3 and 4.x. Deal totals are now converted to the order’s currency at its historical rate — on a shop where the base currency differs from the sale currency, the CRM used to receive “raw” base-currency figures. HTML entities (quotes, ampersand) no longer leak into either the settings or the product names and addresses sent to the CRM. An optional cron token was added for the retry address (blank by default, so an existing crontab keeps working), and the retry response is now machine-readable. The queue now also picks up records stuck in “pending” for over an hour; “Test connection” is now available only to users with edit permission.
1.0.0 (OpenCart 2.3) — August 2026
A separate build for OpenCart 2.3.0.0 – 2.3.0.2 and PHP 5.6+: PHP templates instead of Twig, the addOrderHistory event, retries via a storefront address with its own cron token (2.3 has no scheduler). Totals sent to the CRM are converted to the order’s currency at its historical rate — on a shop where the base currency differs from the sale currency, the 4.x build used to send “raw” base-currency figures into the deal.
1.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. Fixed the retry queue — cron was checking a non-existent key and wasn’t retrying any order; it now also picks up records stuck in “pending” for over an hour. Added an optional cron token: the direct retry-URL call can now be locked down, while OpenCart’s built-in scheduler works fine without it. mbstring guard in the log, fixed the module link in the extensions list.
1.0.1 — July 2026
Fixed a “silent” event on OpenCart 4.0.2.x: in 4.0.2 the method separator is a slash, in 4.1 it’s a dot, so the trigger was switched to a wildcard pattern that works across all 4.x.
1.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, routing by pipeline/stage/source/assignee, token encryption, connection test, request/response logging.

Frequently asked questions

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.

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