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
- You create a webhook in n8n, Make or your backend.
- LinkedScope calls that webhook with POST, with no body, sending an authentication token in a header.
- Your flow validates the token, fetches the deals from your CRM and returns a JSON list.
- 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.
- n8n template (.json): workflow with an instructions note in English
- Make blueprint (.json): scenario with steps named in English
In n8n
- 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….
- 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.
- Secure the webhook
Open LinkedScope calls this webhook. In Credential for Header Auth, choose Create new credential, set Name toauthand Value to a long random secret, then click Save.
Keep the secret: it goes into LinkedScope’s Authentication token field.
- 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. - Point to the list
In One item per deal, set the response field that holds the list of deals (the template usesdata). If your CRM node already returns one item per deal, delete this step. - 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 aredealName,companyName,dealStageandcreatedAt, and the table in Step 2 explains all of them.
- 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.
In Make
- 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.
- 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.
- 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.
- Copy the webhook URL
In the same step, copy the Webhook URL address and save the module.
- 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 indata,results,itemsorrecords.
- 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. - Adjust the field map
Open Respond to LinkedScope (field map). In Body, thefieldMaplinks 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 thedealsline as it is.
- 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
- 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. - 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. - 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. - Map to LinkedScope’s format
Turn each deal into the fields in the table below. - Respond with JSON
Return HTTP 200,Content-Type: application/jsonand 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 withx-make-apikey: <secret>, Make’s API key convention. - To use another header, paste it as
Header-Name: secret, for exampleAuthorization: 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"
}
]| Field | Importance | Description |
|---|---|---|
dealId | Recommended | Unique deal ID. Prevents duplicates. |
dealName | Essential | Deal name. |
dealValue | Essential | Numeric amount, without currency symbol. |
dealStage | Essential | Current stage. Used by stage filters. |
createdAt | Essential | Creation date in ISO 8601. The basis for measuring influence. |
companyName | Essential | The deal’s company name. |
companyDomain | Highly recommended | Company website domain (e.g. acme.com). Greatly improves matching. |
linkedinCompanyUrl or linkedinCompanyId | Highly recommended | The company’s LinkedIn page (/company/slug or /company/123) or numeric ID. The most accurate match. |
isWon | Recommended | true (won), false (lost) or null (open). Text such as won, lost, closedwon, closedlost also works. |
status | Recommended | Alternative to isWon: won, lost or open. It is the field the templates use. |
closedAt | Recommended | Close date, for won or lost deals. |
ownerName and ownerEmail | Recommended | Deal owner. Without them, the owner filter is empty. |
dealLink | Optional | Deal URL in your CRM, to open it straight from the deal list. |
pipeline | Optional | Pipeline 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
- Open integrations
In Settings > Integrations, find the card that reads Connect any CRM with an API using your n8n, Make or similar account.
- 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. - 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. - 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
| Symptom | Likely cause | How to fix |
|---|---|---|
| Error when saving or testing | Webhook 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 deals | The 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 Impact | companyDomain and linkedinCompanyUrl are missing. | Include each company’s domain or LinkedIn page. |
| Empty owner or stage filter | ownerName/ownerEmail or dealStage are missing. | Send these fields on every deal. |
| Test shows exactly 100, 200 or 500 deals | Only 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 timeout | The 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.











