How to connect any CRM through n8n, Make or a webhook

Is your CRM missing from the native integrations? With Any CRM you can connect any CRM that has an API through an automation tool such as n8n or Make, or through your own endpoint.

LinkedScope calls your webhook, receives the list of deals and matches it with LinkedIn Ads.

  • Time: 30 to 60 minutes
  • Who can do it: Someone who can build a flow in n8n, Make or similar
  • Method: HTTPS webhook + token
  • Access: LinkedScope only reads what your webhook returns

Want AI to build the flow?
Connect Claude, ChatGPT or Codex to Make or n8n and use the ready-made prompt in How to build Any CRM with AI.

How it works

  1. You create a webhook in n8n, Make or your backend.
  2. LinkedScope calls that webhook with POST, with no body, sending an authentication token in a header.
  3. Your flow validates the token, fetches the deals from your CRM and returns a JSON list.
  4. LinkedScope imports the deals and repeats the call Monday to Friday at 03:00 UTC (or when you click Sync CRM).

Before you start

  • Owner or admin access to the LinkedScope account and a plan that includes CRM integration.
  • Access to your CRM’s API and to a tool that exposes a public HTTPS webhook (n8n, Make, Zapier with a webhook, Pipedream or your own server).
  • No other CRM connected to LinkedScope. Each account uses one CRM at a time.

Shortcut: ready-made templates for n8n and Make

To skip building the flow from scratch, use the template for your tool.

It already receives LinkedScope’s call, validates the token, splits the deals, maps the fields and responds in the right format, including when the CRM has no deals.

You only swap the CRM connector and review the mapping. With a template, steps 1 and 2 below are already done.

In n8n

  1. Import the template
    In a new workflow, open the ⋯ menu at the top right and choose Import from URL…. Paste the n8n template link and click Import. You can also download the file and use Import from file….n8n Import Workflow from URL dialog with the template link
  2. Review the flow
    The workflow arrives with five steps and a note repeating these instructions: LinkedScope calls this webhook, Fetch deals from your CRM (replace), One item per deal, Map fields for LinkedScope and Respond to LinkedScope.LinkedScope template imported into n8n, with the instructions note and five steps
  3. Secure the webhook
    Open LinkedScope calls this webhook. In Credential for Header Auth, choose Create new credential, set Name to auth and Value to a long random secret, then click Save.
    Keep the secret: it goes into LinkedScope’s Authentication token field.n8n Header Auth credential with Name auth and the secret in Value
  4. Connect your CRM
    Replace Fetch deals from your CRM (replace) with your CRM’s node (for example Pipedrive, HubSpot or Zoho CRM, using the list deals operation with Return All on), or adjust the URL, authentication and pagination of the HTTP request.
    Return every deal from the last 24 months, not only recent ones.
  5. Point to the list
    In One item per deal, set the response field that holds the list of deals (the template uses data). If your CRM node already returns one item per deal, delete this step.
  6. Map the fields
    In Map fields for LinkedScope, each field name is what LinkedScope expects. Replace what comes after $json. with the matching field from your CRM.
    The essential ones are dealName, companyName, dealStage and createdAt, and the table in Step 2 explains all of them.Field mapping step of the template in n8n
  7. Publish and copy the URL
    Click Publish (in older n8n versions, activate the workflow). Then open the first step, select Production URL and copy the address.
    Always use the Production URL: the Test URL only responds while the editor is listening.Webhook Production URL tab in n8n

In Make

  1. Import the blueprint
    Create a new scenario, open the ⋮ menu at the top right and choose Import blueprint. Select the downloaded file and click Import blueprint.Make scenario menu with the Import blueprint option
  2. Review the scenario
    The scenario arrives with five steps: LinkedScope calls this webhook, Fetch deals from your CRM (replace), Collect CRM pages, Convert to JSON and Respond to LinkedScope (field map).
    None of them runs once per deal: LinkedScope converts the fields.LinkedScope blueprint imported into Make, with five steps and a fixed cost
  3. Create the webhook with an API key
    Open LinkedScope calls this webhook and click Add. Name the webhook and, under API Key authentication, click Add API key and then Add.
    Fill API key value with a long random value and click Create and Save. That value is the token that goes into LinkedScope.Creating the Make webhook with API Key authentication and a new key
  4. Copy the webhook URL
    In the same step, copy the Webhook URL address and save the module.Webhook URL address of the Make webhook module
  5. Connect your CRM
    Replace Fetch deals from your CRM (replace) with a request to your CRM API (URL, headers and pagination) or with a search module of your CRM, such as Search deals.
    Keep Return error if HTTP request fails on: if the CRM fails, LinkedScope must receive the error, not an empty list.
    If you use a CRM module, open Collect CRM pages, choose that module in Source Module and tick Select All.
    LinkedScope finds the list on its own when it comes in data, results, items or records.Make Array aggregator with the CRM fetch module as source and the data field ticked
  6. Bring every deal
    If your CRM API splits the list into pages, open the fetch module and choose in Pagination type the type your CRM documentation describes.
    The template already sets Output format to Array of pages and Limit to 10000; if you replace the module, check both fields, because the Make default is 100 and then only the first 100 deals reach LinkedScope.
    CRM search modules also tend to ship with a low limit; raise it or tick the option to return all results. Filtering to the last 24 months cuts the number of pages.
    Pagination does not make the scenario more expensive: the module uses 1 credit with any number of pages.
  7. Adjust the field map
    Open Respond to LinkedScope (field map). In Body, the fieldMap links each LinkedScope field (left) to a deal field in your CRM (right).
    Only change the text on the right, always in quotes: use a dot for nested fields (org.name) and [0] for the first item of a list (owners[0].email).
    Delete the lines your CRM does not have, keeping a comma at the end of every line except the last, and leave the deals line as it is.Make response Body with the LinkedScope fieldMap
  8. Save and turn on the scenario
    Save the scenario and turn on the Immediately as data arrives schedule.

Cost in Make
The scenario uses about 5 credits per call, with any number of deals or CRM pages. The webhook is called when connecting, when testing, on the automatic sync Monday to Friday and whenever someone clicks Sync CRM.

Once the flow is ready, go to Step 3: connect in LinkedScope. In the test, check that the sample deals show a name, company and stage.

Step 1: build the webhook

  1. Create a webhook trigger
    In n8n, use the Webhook node. In Make, the Custom webhook module. Set the method to POST and copy the production (HTTPS) URL.
  2. Validate the token
    Pick a long random secret. At the start of the flow, compare the incoming header with it. If it does not match, respond 401 or 403 and stop.
  3. Fetch the deals from your CRM
    Query your CRM’s API for deals created or closed in the last 24 months, with each deal’s company and owner.
  4. Map to LinkedScope’s format
    Turn each deal into the fields in the table below.
  5. Respond with JSON
    Return HTTP 200, Content-Type: application/json and the list of deals. Don’t let the flow respond before the fetch finishes.

Which header LinkedScope sends

  • If you paste only the secret into the Authentication token field, LinkedScope sends the header auth: <secret>. If the webhook rejects it (401/403), it retries with x-make-apikey: <secret>, Make’s API key convention.
  • To use another header, paste it as Header-Name: secret, for example Authorization: Bearer abc123. The name accepts only letters, numbers and hyphens.

Token security
Never expose the secret in front-end code or repositories. Use a long random value and rotate it if you suspect a leak.

Step 2: response format

The simplest option is to return a JSON array of deals:

[
  {
    "dealId": "D-1001",
    "dealName": "Enterprise plan",
    "dealLink": "https://crm.example.com/deals/D-1001",
    "pipeline": "Sales",
    "dealStage": "Proposal sent",
    "dealValue": 15000,
    "createdAt": "2026-03-01T10:23:00Z",
    "closedAt": null,
    "isWon": null,
    "ownerName": "Ana Silva",
    "ownerEmail": "[email protected]",
    "companyName": "ACME",
    "companyDomain": "acme.com",
    "linkedinCompanyUrl": "https://www.linkedin.com/company/acme"
  }
]
FieldImportanceDescription
dealIdRecommendedUnique deal ID. Prevents duplicates.
dealNameEssentialDeal name.
dealValueEssentialNumeric amount, without currency symbol.
dealStageEssentialCurrent stage. Used by stage filters.
createdAtEssentialCreation date in ISO 8601. The basis for measuring influence.
companyNameEssentialThe deal’s company name.
companyDomainHighly recommendedCompany website domain (e.g. acme.com). Greatly improves matching.
linkedinCompanyUrl or linkedinCompanyIdHighly recommendedThe company’s LinkedIn page (/company/slug or /company/123) or numeric ID. The most accurate match.
isWonRecommendedtrue (won), false (lost) or null (open). Text such as won, lost, closedwon, closedlost also works.
statusRecommendedAlternative to isWon: won, lost or open. It is the field the templates use.
closedAtRecommendedClose date, for won or lost deals.
ownerName and ownerEmailRecommendedDeal owner. Without them, the owner filter is empty.
dealLinkOptionalDeal URL in your CRM, to open it straight from the deal list.
pipelineOptionalPipeline name.

Missing fields don’t break the import: LinkedScope applies defaults. But without company and dates, a deal can’t be linked to LinkedIn Ads.

An object with deals and, optionally, lists of users and companies is also accepted. Deals can then carry only owner and company IDs, and LinkedScope fills in name, email and domain:

{
  "deals": [ { "dealId": "D-1001", "dealName": "Enterprise plan", "ownerId": "u-7", "companyId": "c-42" } ],
  "users": [ { "id": "u-7", "name": "Ana Silva", "email": "[email protected]" } ],
  "companies": [ { "id": "c-42", "name": "ACME", "domain": "acme.com" } ]
}

Accepted list names: deals, data or records for deals; users, owners, members or workspace_members for owners; companies, organizations or accounts for companies.

Field map (fieldMap)

Instead of converting each deal in your flow, you can return the deals as your CRM delivers them together with a fieldMap that says which field of each deal holds each piece of information.

LinkedScope applies the map. Names on the left are the fields in the table above; paths on the right accept dots (org.name) and list positions (owners[0].email).

The deal list can come inside pages (data, results, items or records). If the map has a format error or an unknown field name, the test warns that the field map is invalid.

{
  "fieldMap": {
    "dealId": "id",
    "dealName": "title",
    "companyName": "org.name",
    "companyDomain": "org.website",
    "dealStage": "stage.name",
    "status": "status",
    "dealValue": "value",
    "createdAt": "add_time",
    "closedAt": "close_time",
    "ownerEmail": "owners[0].email"
  },
  "deals": [
    { "data": [ { "id": 1001, "title": "Enterprise plan", "org": { "name": "ACME", "website": "acme.com" }, "stage": { "name": "Proposal sent" }, "status": "open", "value": 15000, "add_time": "2026-03-01T10:23:00Z" } ] }
  ]
}

Step 3: connect in LinkedScope

  1. Open integrations
    In Settings > Integrations, find the card that reads Connect any CRM with an API using your n8n, Make or similar account.Any CRM card on the Integrations tab
  2. Fill in both fields
    In Webhook trigger URL, paste the webhook URL (it must start with https://). In Authentication token, paste the secret or the full header.
  3. Save
    Click Save. LinkedScope calls the webhook right away to validate it. If the call fails, the connection is not saved and an error message appears.
  4. Test the response
    With the connection saved, click Test. The CRM integration test window shows how many deals were received and mapped, the period covered and a sample. Check that names, amounts and companies look right.

After connecting

  • The first sync starts right away. After that, LinkedScope calls the webhook Monday to Friday at 03:00 UTC.
  • To refresh immediately, use Sync CRM on the Integrations tab.
  • Any CRM has no pipeline selector. To analyze a single business unit, filter the deals in your flow before responding.
  • The limited permission alert does not apply to Any CRM: LinkedScope receives exactly what your flow returns.

Common errors

SymptomLikely causeHow to fix
Error when saving or testingWebhook offline, wrong URL or token rejected (401/403).Check that the flow is active in production and that the secret is identical on both sides.
“Enter a valid URL”The URL doesn’t start with http:// or https://.Use the full production webhook URL, over HTTPS.
Test shows 0 dealsThe flow responded before fetching data, or returned the list inside a field with another name.Respond only at the end of the flow and use an array or an object with deals.
Deals without a company in Pipeline ImpactcompanyDomain and linkedinCompanyUrl are missing.Include each company’s domain or LinkedIn page.
Empty owner or stage filterownerName/ownerEmail or dealStage are missing.Send these fields on every deal.
Test shows exactly 100, 200 or 500 dealsOnly the first page arrived, or the search module stopped at its default limit.Turn on request pagination with Limit set to 10000 (in Make, with Output format set to Array of pages) or raise the limit of the CRM search module.
Slow sync or timeoutThe flow fetches many details one by one.Paginate CRM queries and limit the fetch to the last 24 months.

Frequently asked questions

Does LinkedScope send any data to my webhook?

No. The call is a POST with no body. Only the authentication header is sent.

How often is the webhook called?

When connecting, when testing, on the automatic sync (Monday to Friday, 03:00 UTC) and whenever someone clicks Sync CRM. Recent responses are cached for a few hours.

Can I use Zapier?

Yes, as long as the flow receives the webhook and returns the JSON response in the same call. Webhooks that only reply “received” and process later don’t work.

My CRM has a native integration. Should I use Any CRM?

No. Native integrations offer pipeline selection and permission alerts, and need no flow maintenance. Use Any CRM only for CRMs without a native integration.

Can I import contacts or send leads to my CRM through Any CRM?

No. The Any CRM connection is read-only, so the automatic contact import and sending Leads and Spark Prospects to the CRM are unavailable. To send leads to your CRM, use a Leads webhook.

Need help?

Reach us at [email protected], through the Help menu inside LinkedScope or on our contact page.