LinkedIn profiles in Make.com: enrich LinkedIn URLs with the HTTP app
Your scenario in Make (make.com, formerly Integromat) starts from a LinkedIn profile URL: a new row in Google Sheets, a record in Airtable or your CRM, a webhook. You want the person's job title, company and location back, for the next module to write. Make's LinkedIn app can't read someone else's profile: its modules post as you or as your company page, and read your company page's posts and statistics.
Datacircle is a data co-op. Step 1: Query your favorite B2B data APIs through us. Same request, same price, no markup. Step 2: You're DONE. Every morning, you get the flat file of your data plus everyone else's. Right now we have 3 live LinkedIn profile APIs that we trust: Up2Data, HarvestAPI and Fetchin.
One HTTP module gets the profile back, at $2.375 per 1,000 profiles Up2Data finds, and nothing for a profile it can't find. Past Up2Data's daily limit, a second HTTP module calls Fetchin, at $1.485 per 1,000. A Router reads each answer's status code, so a private or deleted profile never stops the scenario. You send the provider's own request to api.datacircle.dev, with your Datacircle key. That's the only change.
We built both requests from these settings and sent them with curl to api.datacircle.dev with a wrong key: the API answered 401 to each, at no charge. We have no Make account, so we haven't run the scenario in Make. Every Make setting here comes from Make's help pages.
Before you start
- A Make account. Make's Free plan has routers and filters, 1,000 credits a month, 2 active scenarios and scheduled runs at most every 15 minutes. Make says all customers can use its new HTTP app.
- A Datacircle API key: sign up with your work email and your key is on your dashboard. You get a $5 credit, enough for 2,105 profiles through Up2Data.
- A trigger that gives the profile's URL, like
https://www.linkedin.com/in/williamhgates.
Your key in a keychain
In the HTTP module below, set Authentication type to API key, then create a keychain under Credentials:
| Field | Value |
|---|---|
| Name | Datacircle API key |
| Key | Token, a space, then your key |
| API key placement | In the header |
| API key parameter name | Authorization |
Make keeps the key in the keychain and adds the Authorization header itself, so you don't type the key in the module's headers. Both HTTP modules use it. To change the key, edit it once under Keys in Make's left sidebar. If your Datacircle key leaks, reset it through our API: the old one stops working.
The HTTP module
After your trigger, add HTTP, then Make a request, with these settings:
| Field | Value |
|---|---|
| Authentication type | API key, with the Datacircle API key keychain |
| URL | https://api.datacircle.dev/v1/profiles/enrich |
| Method | POST |
| Headers | X-Data-Provider: up2data |
| Body content type | application/json |
| Body input method | Data structure. In Body structure, add a text field url and save |
| Body content | url: your trigger's LinkedIn URL |
| Parse response | Yes |
| Return error if HTTP request fails | No, in Advanced settings |
| Timeout | 60, in Advanced settings |
The module sends the same request as this curl command, which you can run in a terminal to check your key:
curl -X POST "https://api.datacircle.dev/v1/profiles/enrich" \
-H "Authorization: Token $DATACIRCLE_API_KEY" \
-H "X-Data-Provider: up2data" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.linkedin.com/in/williamhgates"}'Return error if HTTP request fails on No lets the scenario run on after a 4xx or 5xx: the module returns a private profile's 422 like a 200, with its status code. On Yes, Make stops the scenario on a 4xx or 5xx, and turns it off once the errors in a row reach its Errors before deactivation setting, or at the first one when an instant trigger, such as a webhook, starts it. Make reads a 429 as a rate limit error, and pauses a scheduled scenario's next run for 20 minutes.
Parse response on Yes turns each field of the answer into an item you can map. Make lists them once the module has run, so run the scenario on one row first. We bill that call like any other. Our API answers within 45 seconds, with a 503 when the provider is slow, so a 60 second Timeout gets that answer.
A Router: one route per status code
After the HTTP module, add a Router. Give each route a filter on the HTTP module's status code, and make the last one the fallback route, which takes every answer the other filters don't:
| Status code | What it means | Cost | The route |
|---|---|---|---|
| 200 | the profile | $2.375 per 1,000 | Found: writes the fields and found |
| 422 | Up2Data can't reach that profile: private or deleted | free | Not found: writes not found: private or deleted, free |
| 400 | not a LinkedIn profile URL: a company page or a malformed URL | free | Not a profile URL: writes not a profile URL, free |
| 429 | Up2Data's daily limit, or its rate limit | free | Daily limit: the Fetchin module, below |
| any other | 401: the key is wrong. 402: your balance is too low. 502, 503 or 504: Up2Data failed | free | Error, the fallback: writes error and the status code |
Up2Data takes $1 a day per account (421 profiles), with a shared daily limit for all customers, then answers 429 until 00:00 UTC. HarvestAPI has no daily limit. Fetchin has no daily limit either. A call your balance can't cover answers 402. Add funds, from $5, on your dashboard.
Past Up2Data's daily limit: a second HTTP module calls Fetchin
On the Daily limit route, add a second Make a request module with the same keychain. It calls Fetchin, at $1.485 per 1,000 against HarvestAPI's $3.70.
| Field | Value |
|---|---|
| Authentication type | API key, with the Datacircle API key keychain |
| URL | https://api.datacircle.dev/api/v1/profile |
| Method | GET |
| Headers | X-Data-Provider: fetchin |
| Query parameters | profileUrlOrUrn: your trigger's LinkedIn URL |
| Parse response | Yes |
| Return error if HTTP request fails | No, in Advanced settings |
| Timeout | 60, in Advanced settings |
A second Router after it sends each Fetchin answer down its route:
| Status code | What it means | Cost | The route |
|---|---|---|---|
| 200 | the profile | $1.485 per 1,000 | Found (Fetchin): writes the fields and found (Fetchin) |
404, and the answer's code is PROFILE_NOT_FOUND | Fetchin can't find that profile: private or deleted | $1.485 per 1,000: Fetchin bills the lookup | Not found (Fetchin): writes not found (Fetchin): private or deleted, billed |
| 400 | not a LinkedIn profile URL: at its daily limit, Up2Data answers 429 before it checks the URL | free | Not a profile URL: writes not a profile URL, free |
| any other | 401, 402, a 404 without that code, 502, 503 or 504. 429: Fetchin's rate limit, which you share with other Datacircle customers | free | Error, the fallback: writes error and the status code |
Fields for the next module
Each route ends with its own module that writes the row back, such as Google Sheets' Update a Row, with your trigger's row in Row number. The Found routes write these fields:
| Column | From Up2Data | From Fetchin |
|---|---|---|
| status | found | found (Fetchin) |
| title | data. | jobTitle |
| company | data. | companyName |
| location | data. | location |
| headline | data. | title |
| industry, headcount | data. | empty |
| cost_usd | datacircle_ | datacircle_ |
Fetchin returns the profile's industry, not the company's, and no headcount, so the Found (Fetchin) route leaves industry and headcount empty. Fetchin's Not found route writes the status and cost_usd, since Fetchin bills the lookup. The other routes write the status alone. Our LinkedIn Profile API page shows the profile's other fields, such as jobs, schools and skills.
Cost per 1,000 profiles
We charge your balance these prices, with no markup, as our pricing page shows:
| Up2Data | Fetchin | |
|---|---|---|
| Per 1,000 found | $2.375 | $1.485 |
| Per 1,000 not found | free | $1.485 |
| Daily limit | 421 profiles per account | none |
If 1,000 new rows come in one day and the providers find every profile, you pay us $1.86 at most: $1.00 for 421 through Up2Data and $0.86 for the other 579 through Fetchin, less if all our customers together reach Up2Data's daily limit sooner. Fetchin costs less per profile found but bills a profile it can't find, which Up2Data doesn't. It also gives no company industry or headcount, so the scenario calls Up2Data first.
Make also charges its own credits: 1 for each module run of a non-AI app. A row takes 2: the Up2Data call and the module that writes the row. Past the daily limit it takes 3, with Fetchin's call. The trigger takes 1 for each check.
The same call in n8n: LinkedIn profiles in n8n. In a Zap: LinkedIn profiles in Zapier. In a Google Sheet, without Make: LinkedIn profiles in Google Sheets. From Python: get LinkedIn profile data with Python. Other vendors' prices per 1,000: LinkedIn profile API pricing compared.
Questions
Can Make get LinkedIn profile data?
Yes, with the HTTP app's Make a request module calling a LinkedIn profile API: send the profile's URL, get JSON back. Make's LinkedIn app can't read someone else's profile: its modules post as you or as your company page, and read your company page's posts and statistics. With our API: POST {"url": "<the profile's LinkedIn URL>"} to https://api.datacircle.dev/v1/profiles/enrich, with your key in an API key keychain (Authorization: Token <your key>) and the header X-Data-Provider: up2data. Past Up2Data's daily limit, send the URL to Fetchin from a second Make a request module: GET https://api.datacircle.dev/api/v1/profile?profileUrlOrUrn=<the profile's LinkedIn URL>, with X-Data-Provider: fetchin.
Does it work on Make's Free plan?
Make says all customers can use its new HTTP app, and its Free plan has routers and filters. Free gives 1,000 credits a month, 2 active scenarios and scheduled runs at most every 15 minutes. A row takes 2 credits, 3 once you pass Up2Data's daily limit, and each trigger check takes 1. On Free, run the trigger a few times a day, not every 15 minutes. We haven't run it on any Make plan.
Why turn off Return error if HTTP request fails?
With it off, Make won't stop your scenario over one private profile. On Yes, Make stops the scenario on a 4xx or 5xx answer, and turns it off once the errors in a row reach its Errors before deactivation setting. Make reads a 429, Up2Data's daily limit, as a rate limit error, and pauses a scheduled scenario's next run for 20 minutes. On No, every answer comes out of the module with its status code, and the Router sends it down its route.
How much does it cost to enrich LinkedIn profiles in Make?
$2.375 per 1,000 through Up2Data (a profile it can't find is free), $3.70 per 1,000 through HarvestAPI. $1.485 per 1,000 through Fetchin, a profile it can't find billed the same. HarvestAPI bills a profile it can't find at $2.30 per 1,000. Make charges its own credits for each module run, and we take each call's price from your Datacircle balance. Say you find 1,000 profiles in a day: 421 through Up2Data ($1.00) and 579 through Fetchin ($0.86), $1.86 in all.
Is there a daily limit?
Up2Data takes $1 a day per account (421 profiles), with a shared daily limit for all customers, then answers 429 until 00:00 UTC. HarvestAPI has no daily limit. Fetchin has no daily limit either.
Is each request live, or cached?
Live. Each request goes to the provider and gets the profile as it is today.
Do I need a LinkedIn account?
No. You send the profile's URL with your Datacircle key: no LinkedIn login, no cookies, no browser.
What happens when my balance runs out?
A call your balance can't cover answers 402. Add funds, from $5, on your dashboard.
Get started
Sign up at datacircle.dev with your work email: a $5 credit, that's 2,105 LinkedIn profiles at $2.375 per 1,000.
Sign up