Skip to main content

Your Implementation Required

These endpoints must be implemented on your server

Overview

The sync and update endpoints allow bidirectional data flow between Enginy and your CRM:
Key Principle: All matching logic lives in your CRM, not Enginy. You decide how to identify companies (by domain, name, LinkedIn URL, etc.) and what data to sync back.

How Matching Works

When Enginy sends companies to sync, your CRM should:
  1. Look up each company using your preferred identifier(s)
  2. Return matches with your CRM’s internal ID (crmId)
  3. Optionally return properties you want synced back to Enginy

Common Matching Strategies

Domain (Most Common)

Match by domain field - the most reliable identifier for companies

LinkedIn URL

Match by linkedinUrl - useful for B2B companies

Company Name

Match by name - use fuzzy matching for variations

Composite Key

Combine domain + name for higher accuracy

Domain Normalization

Always normalize domains before matching:

Sync Companies

Request

Request Body

Enginy sends all companies it wants to sync:

Response

Return only companies that exist in your CRM:
Company company-789 is not in the response because it doesn’t exist in your CRM. Only return matches.

Example Implementation

Here’s how to implement the matching logic:

Update Companies

After syncing, Enginy knows which companies have CRM IDs. The update endpoint receives only companies that were previously matched.

Request

Request Body

Every company in an update request has a crmId because it was returned during a previous sync.

Response

Example Implementation


Properties You Can Sync Back

When you return properties in your response, Enginy will store these values on the company. Common properties to sync:
You can return any properties you want. Enginy will store them as custom fields on the company.

Handling Null Values

Important: When Genesy syncs properties back from your CRM, fields that are returned as null (or not returned at all) will clear the existing value in Genesy. This includes core fields like domain and phone.
To prevent accidentally clearing data in Genesy, follow these guidelines: Best Practice: Only include fields in properties that you explicitly want to sync back. If you don’t want to modify a field, don’t include it in the properties object.

Available Company Fields

Enginy sends these fields (when available):

Engagement Field Updates

When contacts at a company engage with campaigns, Enginy can also send engagement updates to companies through the PUT /companies endpoint. These updates contain custom field names configured by the user.

Example Engagement Update

Field names are user-configurable. Your CRM should accept any field name and store it appropriately.

Error Handling

Partial Success

If some companies fail, return successful results and errors separately:

Update Failures

For updates, indicate failure in the result:

Handling Edge Cases

Subsidiaries & Parent Companies

If your CRM tracks parent/subsidiary relationships, decide how to handle:

Duplicate Domains

If multiple accounts share a domain, pick the most relevant:

Engagement Field Updates

When contacts at a company engage with campaigns, Enginy can also update company records through the PUT /companies endpoint. These updates contain custom field names configured by the user.

Example Engagement Update

Available Engagement Fields

The same engagement fields available for contacts can be configured for companies:
Field names are user-configurable. Your CRM should accept any field name and store it appropriately.

Implementation Tip

Make sure your PUT /companies handler stores unknown fields:

Reference Implementation

GitHub Repository

See a complete working implementation of companies sync and update endpoints, including engagement field handling.