Mautic and Zoho CRM integration

Mautic can push contacts to Zoho CRM from campaign actions or point triggers. This page covers the API Console client, data centre choice, English-language setup and the mapping and testing steps that prevent sync errors.

On this page

How to connect Mautic to Zoho CRM for campaign-driven contact sync

The Mautic Zoho CRM plugin pushes contacts from campaign actions or point triggers, and it authenticates through a Server Based Application client that you create in the Zoho API Console. For a team running Mautic campaigns that must place qualified contacts into Zoho CRM, the work starts with three decisions: which campaign step or point threshold marks a contact as qualified, which Zoho CRM module receives the record, and who in your organization owns the Zoho API client and its credentials after the setup is complete. Settle those questions before anyone opens the plugin configuration screen, because they determine what the mapping has to cover.

The sync flow is straightforward at a high level. A contact reaches a campaign action or crosses a point trigger, Mautic sends that contact to Zoho CRM through the API using the client ID and secret you entered, and Zoho returns a record or an error. The effort sits in the field mapping. Mautic contact fields must line up with Zoho CRM fields, and the authorization step has its own check: the data centre you select must match your Zoho CRM instance URL, so an account at crm.zoho.com needs the .com option. Confirm the data centre with your Zoho administrator before you authorize, since a mismatch blocks the connection.

Campaign-driven sync depends on Mautic cron jobs. The campaign update and campaign trigger jobs must run on schedule for contacts to reach a trigger point and be pushed to Zoho CRM. If those jobs stall, qualified contacts wait in Mautic without any visible error in Zoho. Ask your operations team who monitors cron execution, how failures are alerted, and whether the jobs are staggered as the Mautic documentation recommends. Include this in the handover plan so that someone other than the original builder knows how to check whether contacts are moving.

This setup is a configuration task with a mapping and testing phase. It is not a data migration, so you are not bulk loading historical contacts into Zoho CRM. The testing phase should use a small set of test contacts and confirm the field mapping, duplicate handling, record ownership and error reporting before any live campaign step is switched on. Both the Zoho and Mautic accounts must be configured in English, because Zoho changes contact field aliases by language and an account set to another language produces unmatched fields and sync errors. Check the language settings on both sides before you start mapping.

What you need in place before you touch the Zoho plugin

Each item below is a gate for the Zoho CRM plugin, and they depend on one another. Confirm the Mautic release and server first, then the Zoho administrator and API client, the public HTTPS callback, matching English language settings, and a cron schedule that runs campaign triggers.

Supported Mautic release line

Choose a Mautic release that still receives security support on your go-live date, and plan its upgrade path before setup. According to the Mautic releases page, Mautic 7.2 receives active and security support until 30 September 2026, and Mautic 7.3 is planned as the long-term support release with security support through 31 December 2027. Check the current table before you commit, because the project publishes monthly patch releases, minor releases every three months and major releases every two years.

PHP, database and web server

The Mautic 7.0 requirements call for PHP 8.2, 8.3, 8.4 or 8.5, MySQL 5.7 or higher with InnoDB, or MariaDB 10.2 or higher, and Apache, Nginx or IIS as the web server. From Mautic 5.0 onward, npm is also required. Confirm the exact requirements for your chosen release on the requirements page, and ask your platform team to size the database and PHP settings against your expected contact volume.

VPS or dedicated server hosting

The Mautic project states that Mautic should not be installed on shared hosting and recommends a VPS or dedicated server instead. Before you buy, confirm with the provider that you can select the PHP version, install npm, run scheduled cron jobs and keep a background worker running. If any of these are restricted, the host is not suitable for the Zoho CRM sync, regardless of its price.

Zoho administrator and API client

A Zoho CRM administrator must be able to create a Server Based Application client in the Zoho API Console. The client ID and client secret from that console are entered into Mautic, so the person who holds the Zoho admin role should join the setup early. Agree in advance who will own these credentials and how they will be rotated when staff change.

Instance URL and HTTPS callback

The Zoho API client requires your Mautic instance URL and the plugin's callback URL, and the callback must be reachable over public HTTPS. Settle the hostname and certificate before you create the client, because a later change to the URL means updating the Zoho client as well. Also confirm the data centre, which must match your Zoho CRM instance URL, such as the .com option for crm.zoho.com.

English language in both accounts

Set both the Zoho CRM account and the Mautic account to English before you run setup. Mautic warns that Zoho changes contact field aliases by language, so a non-English account can leave fields unmatched and cause sync errors. Check the language setting in both accounts before you map a single field, and record the setting in your implementation checklist.

Cron schedule for campaign triggers

Mautic depends on cron jobs for segment updates, campaign updates and campaign triggers, and the documentation says these jobs should be staggered so they do not all run at once. Pushes to Zoho CRM that start from campaign actions or point triggers depend on this schedule running reliably. If emails are queued, a messenger consumer must also run, and segment emails depend on the broadcasts command.

Configuring the Zoho CRM plugin in the right order

This sequence connects a Mautic installation to one Zoho CRM organization in an order that avoids the common failures: language settings, mismatched URLs, the wrong data centre and unmatched fields. Each step ends with a check, so the team knows the integration works before live contacts flow through it.

  1. Confirm the Mautic and callback URLs

    The administrator who owns the Mautic installation starts here. Open the Zoho CRM plugin settings in Mautic and copy the callback URL exactly as the plugin displays it. Then confirm the public address that users reach for this Mautic instance. Both values go into the Zoho API Console in a later step, so a typo or an address that changes afterward will break authorization. Record both values in your change log. Done when both URLs are written down and you have checked them against the live Mautic login page in a browser.

  2. Set Zoho and Mautic to English

    Before creating any credentials, set the language of the Zoho CRM account and the Mautic user performing the setup to English. Mautic's documentation warns that Zoho changes contact field aliases by language, so a non-English account can produce unmatched fields and sync errors that look like mapping faults. Check the language in the Zoho CRM user settings and in the Mautic user profile. Done when both accounts show English and the field labels you plan to map appear in English in Zoho CRM.

  3. Create the Server Based Application client

    A Zoho administrator or the person who owns the integration signs in to the Zoho API Console and creates a Server Based Application client. Enter the Mautic instance URL and the plugin callback URL from the first step in the homepage and redirect fields the console asks for. Keep the console open, because the next step needs the credentials it issues. Done when the client appears in the console list with a client ID and client secret generated, and you have confirmed that the redirect URL matches the callback URL character for character.

  4. Enter the client credentials in Mautic

    Return to the Zoho CRM plugin settings in Mautic and enter the client ID and client secret from the console. Paste them from the console to avoid transcription errors. Store the secret in your secrets manager or password vault as well, because the console is where you would regenerate it if it is lost. Do not leave credentials in tickets or chat threads. Done when the settings save without error and the plugin holds both values.

  5. Select the matching Zoho data centre

    In the plugin settings, choose the data centre that matches the Zoho CRM instance your team uses. Mautic's documentation gives the .com option for crm.zoho.com as its example, so confirm the domain in the browser address bar when you sign in to CRM and compare it with the option you select. A mismatch causes authorization to fail or to connect to the wrong account. Check Zoho's own documentation for the list of data centres. Done when the selected data centre matches the CRM domain your team signs into and the setting is saved.

  6. Authorize the plugin and confirm the grant

    Use the authorize action in the Zoho CRM plugin settings. Mautic sends the signed-in administrator to Zoho to approve access, then returns them to Mautic. Sign in with the Zoho account your policy designates for the integration, such as a service account. Done when Mautic reports that authorization completed and the plugin shows a connected state. If the return to Mautic shows an error, check the data centre and the redirect URL first, since those two settings cause most failures at this point.

  7. Enable the campaign action or point trigger

    In the Mautic campaign builder, add the Zoho CRM action to a test campaign, or enable the point trigger that pushes contacts to Zoho CRM. Limit the first run to a test segment made up of contacts your team controls, so any mapping issue affects only test records. Leave the campaign unpublished until the verification in the final step passes. Done when the action appears in the campaign builder and the campaign is saved in a state your team can activate on purpose.

  8. Verify a test contact reaches Zoho CRM

    Add a test contact that matches the segment, then run the campaign or trigger the point. Mautic relies on cron jobs for campaign updates and triggers, so confirm those jobs are running on the server before you judge the result. Search Zoho CRM for the test contact and check that the mapped fields hold the expected values. Review Mautic's logs for sync errors. Done when the contact appears in Zoho CRM with correct field values and no sync errors are logged. Repeat with a second test contact before you move to live segments.

Choosing the Zoho data centre so authorization matches your CRM

The data centre selected during Zoho plugin authorization must match the Zoho CRM instance URL your team uses. The Mautic Zoho CRM documentation gives the example of crm.zoho.com, which corresponds to the .com option in the plugin. Zoho operates regional data centres, so the choice is a configuration fact about where your CRM lives, not a preference about where Mautic should send data. Set it before you create or authorize anything else, because every later step depends on it.

A mismatch usually appears as an authorization failure during the connection step, or as API errors after authorization appears to succeed. Contacts may fail to push from campaign actions or point triggers, and the Mautic logs may show token or request errors that look like credential problems. Before you rotate the client ID or secret, confirm the data centre selection. Also check the callback URL registered in the Zoho API Console, since a callback mismatch is a separate failure with its own symptoms and fix.

Find the correct instance URL from the Zoho CRM account your sales or operations team already uses. Sign in with an account that has access to that instance, then read the domain in the browser address bar. Match that domain to the data centre option in the plugin settings. Avoid relying on bookmarks, old onboarding emails or a colleague's memory, because those can point to a retired or different region. Record the confirmed URL in your implementation notes next to the Server Based Application client details so the next administrator can verify it.

If your organization has more than one Zoho CRM instance, confirm the target with the Zoho administrator before authorization. Ask which instance receives marketing contacts, which data centre hosts it, which other instances exist for regional or product teams, and which Zoho account owns the API Console client. Ask whether each Mautic installation should connect to one instance only, and confirm that answer in the current plugin documentation. Verify the English-language account settings on the same instance, because field aliases are language dependent and an unmatched instance can produce sync errors even after authorization succeeds.

Mapping Mautic contact fields to Zoho CRM contact fields

This table lists the contact fields to map between Mautic and Zoho CRM, the direction of each mapping, and the team that decides each value. Use it as a starting worksheet: confirm every Zoho field name in your own Zoho CRM instance, because Zoho changes field aliases by language and both the Zoho and Mautic accounts must be set to English. Record an owner for every row before testing the first sync, so that any mismatch has an accountable team.

Mautic fieldZoho CRM fieldDirectionOwner decision
EmailEmail field on the Zoho contact (confirm label in your instance)Mautic to ZohoMarketing operations owns it as the matching identifier
First nameFirst Name field on the Zoho contact (confirm label)Mautic to ZohoMarketing operations; sales confirms display format
Last nameLast Name field on the Zoho contact (confirm label)Mautic to ZohoMarketing operations; check whether Zoho requires it
CompanyAccount or company field the plugin writes to (confirm which one)Mautic to ZohoSales operations owns account linkage
Lead status (custom field)Custom picklist created in Zoho with English labelsMautic to ZohoSales operations sets allowed values; both teams agree the mapping
Lead source (custom field)Custom field created in Zoho with English labelsMautic to ZohoMarketing owns the source values sent from campaigns
Mautic contact ID (optional)Custom text field created in Zoho before mappingMautic to ZohoIntegration owner, if you add it for reliable matching

Why English-language accounts keep field mapping from breaking

Set both accounts to English before you configure any field mapping. The Mautic Zoho CRM documentation warns that the Zoho and Mautic accounts must both be configured in English, because Zoho changes contact field aliases by language. The field names your mapping was built against can change when the account language differs, so a mapping that looked correct on the day you saved it may stop matching what Zoho returns. Treat the language setting as a prerequisite, the same way you would confirm the data centre before authorizing the plugin.

A non-English Zoho account usually does not fail with a clear message. Mautic shows fields that do not line up with the ones Zoho expects, some contact attributes are never written, and push attempts from campaign actions or point triggers return sync errors. Those symptoms look like a mapping bug, so the natural response is to rebuild the mapping field by field. That work rarely helps, because the mapping is correct for the language it was built in. Before anyone edits mappings, compare the field names in Mautic with the field names Zoho shows for the same contact, and check whether the language is the cause.

Run the language check on both sides before you map anything. In Zoho, confirm the language set for the account and for the user who created the API client, using the settings location in your current Zoho interface, since menu paths change. In Mautic, check the language configured for the user who runs the plugin and the instance's default locale. Then push one test contact through a campaign action and compare the Zoho record field by field. Record the account language, the Mautic locale and the test result in your change log so that a later support request starts from known facts.

If the Zoho account was set up in another language, do not patch around it with remapping. Ask the Zoho administrator to change the account language to English, then confirm with them whether the change affects existing records, other integrations or user-facing labels that your sales team relies on. Once the language is English, recheck the field names, reauthorize the plugin if the mapping no longer resolves, and retest with a single contact. Review sync errors from the period before the fix so you know which contacts need to be pushed again. Your Zoho administrator should confirm whether the account should be rebuilt instead of corrected in place.

Protecting the Zoho client secret and the access scope

The Zoho client secret and the plugin settings in Mautic give anyone who holds them a path into your CRM, so they need the same care as other production credentials. The cards below cover where the secret lives, who can change it, how far the Zoho client reaches, how transport and failures are watched, and the privacy duties that apply when marketing contact data leaves Mautic.

Store and limit the client secret

The client ID and secret are entered in Mautic when the Zoho CRM plugin is configured, so the secret sits in the Mautic database and configuration rather than only in Zoho. Confirm where your installation keeps that configuration, who can read it on the server and in backups, and whether database access is restricted to the Mautic service account. Treat the secret as a production credential with an owner and a record of where it is stored.

Restrict who edits plugin settings

Changing the Zoho client, data centre or callback settings in Mautic affects every campaign action that pushes contacts to Zoho. Review which Mautic user roles can open the plugin configuration page and limit that permission to a small named group, such as the administrators who own the integration. Check the audit or log options available in your Mautic version before relying on them to show who made a change.

Scope the Zoho API client

Create the Server Based Application client in the Zoho API Console for this integration only, and grant it the modules and operations that field mapping and contact pushes need. Avoid reusing a client that other systems share, because a leaked secret would then reach those systems too. Ask Zoho's documentation or your Zoho administrator which scopes the plugin requests, and review the granted scopes after authorization.

Rotate the secret when staff change

When an administrator who knew the client secret leaves or changes role, generate a new secret in the Zoho API Console, update the client in Mautic, and re-authorize the plugin. Then revoke the old secret so it no longer works. Confirm with your Zoho administrator how the console lists and revokes client secrets in your Zoho data centre, and write the rotation steps into the offboarding checklist.

Serve the callback URL over HTTPS

The plugin's callback URL is registered in the Zoho API Console and receives the authorization response, so it must use the Mautic instance address over HTTPS with a valid certificate. Check that the registered callback matches the exact public address of your Mautic installation, including the scheme and host. A mismatch or plain HTTP endpoint is a common cause of failed authorization and an avoidable exposure.

Monitor failed pushes

Failed contact pushes to Zoho can stem from expired authorization, unmatched field aliases or access denied responses, and each has a different fix. Decide where Mautic failures are logged, who reviews them, and how often, and set an alert on repeated errors where your monitoring allows it. Review logs after any secret rotation or Zoho configuration change to confirm pushes resume without data loss.

Review data protection duties

Sending marketing contact data from Mautic to Zoho CRM is a transfer of personal data to a second system, which brings its own lawful basis, consent records, retention, data location and processor terms to confirm. Ask your privacy lead which contact fields should be pushed, whether the Zoho data centre choice affects where data is held, and how deletion or unsubscribe events in Mautic reach Zoho. Document the answers before the first live push.

Common Zoho CRM sync errors and how to fix them

This table pairs common Mautic to Zoho CRM sync symptoms with their likely causes and fixes. Read each row from the symptom outward, and check the Mautic logs and the Zoho API Console before you change any field mapping. Most failures trace back to the data centre, the client configuration, the account language or whether the campaign action is active and running.

SymptomLikely causeFix
Authorization failsThe data centre selected in Mautic does not match the Zoho CRM instance URL, such as the .com option for crm.zoho.comSelect the data centre that matches your CRM URL, then authorize the plugin again
Callback error during authorizationThe callback URL in Mautic differs from the redirect URL on the Server Based Application client in the Zoho API ConsoleCopy the plugin callback URL exactly into the Zoho client, save it, then retry authorization
Contacts push with missing valuesZoho and Mautic accounts are not set to English, so Zoho field aliases differ by language and fields go unmatchedSet both accounts to English, then compare each mapped field against the Zoho field names
No contacts syncThe campaign action or point trigger is inactive, or the campaign cron job has not runConfirm the action or trigger is active, run the campaign cron job, and check the logs for the run
Callback or sync errors after credential changesThe client ID or secret in Mautic was copied from a different Zoho client or was entered incorrectlyRe-enter the client ID and secret from the Zoho API Console, then reauthorize the plugin
Duplicate or unmatched records in Zoho CRMExisting Zoho records were not matched to Mautic contacts, or the matching field differs from what the team expectsConfirm which Zoho field the plugin uses to match records, clean existing duplicates, then test with a small set of contacts
Errors continue after mapping changesMappings were changed before the Mautic logs and Zoho API Console output were reviewedReview the logs and Zoho API Console first, then change one mapping at a time and retest

Testing a contact push from Mautic to Zoho CRM end to end

The goal of this test is to confirm that a contact from Mautic arrives in Zoho CRM as one complete, correctly mapped record through both trigger paths before any live list is connected. Begin with the setup checks. Confirm that the Zoho API Console client is a Server Based Application, that its client ID and secret are entered in Mautic, and that the data centre selected during authorization matches your Zoho CRM instance URL, such as the .com option for crm.zoho.com. Then create a test contact. If you have a non-production Mautic instance, use it. If you test on production, place the contact in a campaign clearly labeled as a test, using an email address on a domain you control so that any stray record is easy to find and delete in Zoho.

Run the two trigger paths separately so that any failure can be traced to one of them. For the point trigger, add the points that the Zoho action is configured to respond to, then wait for the push to occur. For the campaign action, add the test contact to the test campaign and let the campaign action run. After each push, open the Zoho CRM record and compare every mapped field against the value on the Mautic contact record, one field at a time. Log the Zoho record ID, the module the record landed in, the time of the push, and any field that is blank, duplicated, or stored under an unexpected label. Unmatched or blank fields are the first symptom to check against the English-language requirement, so confirm that both the Zoho and Mautic accounts are set to English before you change any mapping.

Repeat the test with a second contact that has one optional field empty. Illustratively, this could be a contact with a phone number but no company name. Choose the empty field before the test so the result is easy to read. Then confirm three things. First, whether the push completes or the sync log reports an error. Second, whether the empty field is skipped or written as a blank into Zoho. Third, whether a blank in Mautic clears a value that a sales representative has already entered in Zoho. The third outcome matters most because it changes data your teams rely on. If the behavior is not what you want, adjust the field mapping or your contact data rules before go-live, then rerun both trigger paths.

Next, confirm that cron-driven triggers fire on schedule. Mautic depends on cron jobs for campaign updates and campaign triggers, and its documentation says these jobs should be staggered. Check the last run time of the campaign job on your server, then add a test contact that should be picked up on the next scheduled run. Confirm whether the push follows that run without any manual action. Write up the results before enabling the integration for live lists. Record each test date, contact, trigger path, Zoho record ID, every mismatch, and the fix applied. Re-run any test that changed after a fix. Enable the integration only when all tests pass with a clean sync log, and start with one small live list so you can watch the first pushes.

Questions teams ask before they set up Mautic and Zoho CRM

How much effort does a Mautic and Zoho CRM integration take?

Effort depends mostly on scope, and no single figure applies to every organization. The main drivers are the number of fields to map, the number of Zoho CRM instances that receive contacts, how much language and data quality clean-up the source data needs, and how much testing your team requires before go-live. A single instance with a short, agreed field list is a much smaller job than several instances with custom fields and inconsistent records. Ask for the effort to be broken down by these drivers in the written scope, so you can see which items your team could handle and which need specialist time. Check any figure against your own field inventory before you accept it.

Can an internal Mautic administrator set up the Zoho CRM plugin alone?

Often yes for the basic connection, if the administrator has the right access and time. The basic steps are creating a Server Based Application client in the Zoho API Console, entering the client ID and secret in Mautic, authorizing with the correct data centre, and adding the push action to a campaign or point trigger. Field mapping, multiple Zoho instances, data clean-up and testing are where internal teams usually need more time or experience. Check whether your administrators have set up OAuth clients before and understand how Zoho field aliases work. A short pilot with a few test contacts will show quickly whether your team can carry the work forward after handover.

What access and information does the Zoho CRM integration need from us?

The work needs both sides of the integration to be open to the people doing it. On the Mautic side, you need admin access to plugin configuration, campaigns and the cron environment. On the Zoho side, you need a Zoho administrator who can create the API Console client, review the connection and approve changes to fields. You also need a Zoho field inventory that lists each field, its type and the purpose it serves, plus a named person who signs off the field mapping before the build starts. Confirm who in your organization owns each item, and agree who can change credentials after handover. Missing access usually adds waiting time, so raise it at the scoping stage.

Why must Mautic and Zoho CRM be set to English?

Mautic warns that both accounts must be configured in English because Zoho changes contact field aliases by language. If either the Zoho or Mautic account uses another language, fields can fail to match and the sync returns errors. The result can be contacts that appear to sync while values are missing or rejected, which is harder to spot than a hard failure. Check the language setting in both accounts before you map fields, and record it in your field inventory. Changing the language later can change aliases again, so treat it as a change that needs testing. Confirm current behavior against the Zoho documentation and the Mautic plugin documentation for your versions.

Which Zoho data centre option should we choose during authorization?

Choose the data centre that matches your Zoho CRM instance URL. The Mautic documentation gives the example of the .com option for crm.zoho.com, so an instance hosted under a different regional domain needs the matching option. A mismatched data centre can cause authorization to fail or return no data, so check it before you enter credentials. To find your URL, sign in to Zoho CRM and read the address bar, then confirm it with your Zoho administrator. If your organization has more than one Zoho instance, each connection needs its own check. Ask the partner to record the chosen data centre for each instance in the written scope.

What needs ongoing attention after the Mautic and Zoho CRM integration goes live?

Three areas need regular attention: cron health, Mautic upgrades and Zoho account changes. Mautic depends on cron jobs for segment updates, campaign updates and campaign triggers, and the documentation says those jobs should be staggered, so monitor that they run and that failures alert someone. Mautic publishes monthly patch releases, minor releases every three months and major releases every two years, and an upgrade can affect the plugin, so test the integration before upgrading production. Zoho administrators may rename fields, change permissions or alter the API client, which can break mappings without an obvious error. Agree who watches these items and how often they are reviewed.

How do we ask a partner for a fixed-scope quote?

Send a written brief that lists what needs to be connected, and ask for a quote based on a written scope. Include the number of Zoho CRM instances, the fields and objects to map, the campaign actions or point triggers that send contacts, the data clean-up you expect, and the testing and handover you want. Most DeployOpen engagements are fixed scope, with scope, deliverables and timelines agreed in writing before work starts. DeployOpen does not publish a price list, so the quote follows from the written scope. Ask the partner to state assumptions, exclusions and what you must provide, then compare quotes against the same written scope.

How DeployOpen scopes and delivers the Mautic and Zoho CRM integration

DeployOpen plans and builds the Mautic to Zoho CRM integration inside infrastructure you control, so the Zoho API Console client, data centre selection and field mapping are settled before any contact is pushed. Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts. Ongoing support is available as a retainer.

How we scope

  • The written scope names the trigger model, campaign actions or point triggers, and the contacts eligible to sync.
  • Field mapping is agreed up front, with each Mautic field matched to a Zoho CRM field in the English-language account.
  • The scope records which Zoho data centre hosts your CRM instance, and who owns the Zoho and Mautic accounts.

How we build

  • We create the Server Based Application client in Zoho API Console using your Mautic URL and callback URL.
  • Client ID and secret are entered into Mautic, and the authorization data centre is matched to your CRM instance URL.
  • Test contacts run through a campaign action and a point trigger in staging before any live contact syncs.

How we hand over

  • Handover documents the Zoho client settings, the field map, trigger configuration and where the client secret is stored.
  • Operators receive a runbook for re-authorizing the plugin, rotating credentials and checking sync errors after changes.
  • Cron jobs that drive campaign triggers are documented with their schedule, so staggering is reviewed at handover.

How we support

  • Language settings on both the Zoho and Mautic accounts are checked after any change, since field aliases shift by language.
  • Field changes in Zoho CRM, such as new layouts or renamed fields, are reviewed against the agreed mapping.
  • Ongoing support, upgrades and testing can be covered by a retainer after handover, with scope agreed in writing.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.