Social URL Enrichment & Data API
This endpoint enables you to extract data from any LinkedIn profile in real-time, as well as all the data from the company page, and also find a valid verified email from the lead, in a clean JSON output with extracted details and the verified email, in one request.
You also have the option to only fetch the real-time profile data, with an average response time of 3 seconds.
The input parameter is a LinkedIn URL. You can use either a Sales Navigator encrypted URL or a standard LinkedIn URL.
- This API fetches data in real-time, resulting in a 100% hit-rate. We do not rely on a database.
- You will be charged 1 credit per request (only if the profile was successfully scrapped), and we will perform an email search for free.
- You won't be charged for duplicate extraction (twice the same URL in the same month).
Endpoint
POST https://api.prospeo.io/social-url-enrichment
curl -X POST \
-H "Content-Type: application/json" \
-H "X-KEY: your_api_key" \
-d '{
"url": "https://www.linkedin.com/in/john-doe/"
}' \
"https://api.prospeo.io/social-url-enrichment"
Parameters
Parameter | Example value | Description |
---|---|---|
url required | https://www.linkedin.com/in/john-doe https://www.linkedin.com/in/ACwAABlrwXsBEZMJdq4 https://www.linkedin.com/sales/lead/ACwAAA-EHrwXsBEZMXS-jsKAwu,NAME_SEARCH,pehn | The LinkedIn URL of the person. This can be a Sales Navigator encrypted ID or a standard LinkedIn URL. |
profile_only optional | true | This option allows you to specify you only need the data from the LinkedIn profile, but no in-depth company details and no email. This will reduce the response time. |
See our Response time section to better understand the implication of using profile_only
for lower latency.
Response
The response will contain a JSON
object. Check if the error
property is false
. If it is true
, refer to the section below to handle the error message
.
The below response contains all the data we return when profile_only
is not set, or is false
.
{
"error": false,
"response": {
"email": {
"email": "[email protected]",
"email_anon_id": "G4G4IQEMMB",
"email_status": "VALID",
"email_type": "professional"
},
"first_name": "Mandy",
"last_name": "Sarault",
"full_name": "Mandy Sarault",
"gender": "male",
"job_title": "Fleet Manager at Voyago/Transdev - Ottawa",
"linkedin": "https://www.linkedin.com/in/mandy-sarault-example",
"summary": "Experienced Senior Legal Counsel for Crypto and Blockchain companies. Highly specialised in obtaining crypto & payment licenses, ensuring crypto services in the EU, UK, USA, Africa, Asia and Latin America. Proven track record of managing Legal teams.",
"premium": false,
"skills": "AML Compliance, International Private Law",
"current_job_year": 2020,
"current_job_month": 7,
"picture": "https://assets-prospeo.s3.us-east-2.amazonaws.com/lead_YZ2Z0B9CCT276PCRMFCW.jpg",
"location": {
"country": "Canada",
"country_code": "CA",
"state": "Ontario",
"city": "Ottawa",
"timezone": "America/Toronto",
"timezone_offset": "-4.0",
"postal_code": null,
"raw": "Greater Ottawa Metropolitan Area"
},
"company": {
"name": "Voyageur Transportation Services",
"is_catch_all": false,
"size": "1001-5000",
"logo": "https://assets.prospeo.io/company/ZAVWIX5PTA8K15C6LVJY.jpg",
"linkedin": "https://www.linkedin.com/company/voyagomobility",
"website": "http://www.voyago.ca",
"common_email_pattern": null,
"industry": "Transportation/Trucking/Railroad",
"founded_in": 1979,
"description": "Better Together. Voyago is a wholly owned subsidiary of Transdev, The Mobility Company, and together we're Canada's leading passenger mobility service...",
"location": {
"country": "Canada",
"country_code": "CA",
"state": "Ontario",
"city": "London",
"timezone": "America/St_Johns",
"timezone_offset": "-2.5",
"postal_code": "N5V 4L3",
"address": "573 Admiral Court"
}
},
"work_experience": [
{
"company": {
"id": 12993966,
"name": "Mercuryo",
"logo": "https://media.licdn.com/dms/image/C4D0BAQFn5oy3BFhGhA/company-logo_400_400/0/1655383994389?e=1701907200&v=beta&t=M0eWHR6b4IcN8MgFZVnJlztvv-UxG4BWXsi5rmLKqBU",
"url": "https://www.linkedin.com/company/mercuryo-io/",
"employees": {
"start": 51,
"end": 200
}
},
"date": {
"start": {
"month": 7,
"day": null,
"year": 2020
},
"end": {
"month": null,
"day": null,
"year": null
}
},
"profile_positions": [
{
"location": null,
"date": {
"start": {
"month": 6,
"day": null,
"year": 2021
},
"end": {
"month": null,
"day": null,
"year": null
}
},
"company": "Mercuryo",
"description": "Provided legal support for:\n- Expansion of Mercuryo to the United States market, Canada, Latin America\n- Obtaining crypto licenses for various jurisdictions\n- Closing a $7.5M Series A funding led by Target Global\n- Conclusion of partnerships with Binance, 1inch, Ledger, Nexo and others for products as Cryptocurrency Widget, Acquiring & Crypto-Acquiring, Over-the-Counter deals\n- Conclusion of Sponsorship Agreements with LaLiga and Swansea City FC\n\nGeneral Duties:\n- Providing full legal support to Mercuryo for conducting its activity all over the world - Ensuring compliance with regulatory requirements in the countries of operations\n- Keeping Terms and Conditions, Privacy Policy, etc. up to date\n- Drafting and administering all contracts\n- Carrying out research and preparing legal opinions on regulatory changes in crypto and payments industries - Coordinating foreign legal consultants on corporate law matters\n- Performing AML & KYC/KYB checks\n- Undergoing onboarding procedures in financial institutions",
"title": "Senior Legal Counsel (Crypto & Blockchain)",
"employment_type": "Full-time"
},
{
"location": "Москва, Россия",
"date": {
"start": {
"month": 7,
"day": null,
"year": 2020
},
"end": {
"month": 5,
"day": null,
"year": 2021
}
},
"company": "Mercuryo",
"description": null,
"title": "Legal Counsel (Crypto & Blockchain)",
"employment_type": "Full-time"
}
]
}
],
"education": [
{
"date": {
"start": {
"month": null,
"day": null,
"year": 2014
},
"end": {
"month": null,
"day": null,
"year": 2018
}
},
"school": {
"name": "Moscow State Institute of International Relations (University) MFA Russia MGIMO",
"logo": "https://media.licdn.com/dms/image/C560BAQGozQ0DGW-n8g/company-logo_400_400/0/1519871841758?e=1701907200&v=beta&t=mXozpFXnB_mvDXq-5qpCV3y4OKskb58W4JiMMl7G-hM",
"url": "https://www.linkedin.com/school/%D0%BC%D0%BE%D1%81%D0%BA%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B9-%D0%B3%D0%BE%D1%81%D1%83%D0%B4%D0%B0%D1%80%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9-%D0%B8%D0%BD%D1%81%D1%82%D0%B8%D1%82%D1%83%D1%82-%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%D0%BD%D0%B0%D1%80%D0%BE%D0%B4%D0%BD%D1%8B%D1%85-%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B9-%D1%83%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%82%D0%B5%D1%82-%D0%BC%D0%B8%D0%B4-%D1%80%D0%BE%D1%81%D1%81%D0%B8%D0%B8-%D0%BC%D0%B3%D0%B8%D0%BC%D0%BE-/"
},
"degree_name": "Bachelor's degree",
"field_of_study": "International Private and Civil Law"
}
],
"languages": {
"primary_locale": {
"country": "RU",
"language": "ru"
},
"supported_locales": [
{
"country": "RU",
"language": "ru"
}
],
"profile_languages": []
}
}
}
Property | Type | Description |
---|---|---|
error | boolean | Indicates if an error has occurred. If false , the request was successful. If true , an error has occurred. |
email | object | Contains information about the found email. This object is not present if profile_only was set to true . |
email.email | string | The email that was found. |
email.email_status | string | The status of the found email. Can be VALID , CATCH_ALL or NOT_FOUND . |
email.email_type | string | The type of the found email. For this endpoint, it's always professional . |
first_name | string | The first name of the LinkedIn profile owner. |
last_name | string | The last name of the LinkedIn profile owner. |
full_name | string | The full name of the LinkedIn profile owner. |
gender | string | The gender of the LinkedIn profile owner, determined by AI. |
job_title | string | The job title of the LinkedIn profile owner. |
summary | string | The about section of the LinkedIn profile owner. |
skills | string | The skills of the LinkedIn profile owner, separated by commas. |
premium | string | A boolean representing if the LinkedIn profile owner is premium. |
linkedin | string | The LinkedIn URL of the profile owner. |
entity_urn | string | The LinkedIn entity URN of the profile owner (Sales Navigator ID). |
picture | string | This is an URL hosted by ourselves of the profile picture of the LinkedIn profile owner. |
work_experience | object | The complete work experience history of the LinkedIn profile owner. |
education | object | The complete education history of the LinkedIn profile owner. |
languages | object | The list of advertized spoken languages of the LinkedIn profile owner, as well as its configured locale. |
current_job_year | object | The year when the current job of the LinkedIn profile owner was started. |
current_job_month | object | The month when the current job of the LinkedIn profile owner was started. |
location | object | The location of the LinkedIn profile owner. All values are cleaned, standardized and consistent. |
location.country | string | The country of the LinkedIn profile owner. |
location.country_code | string | The ISO 3166-1 alpha-2 country code of the profile owner's country. |
location.state | string | The state of the LinkedIn profile owner. |
location.city | string | The city of the LinkedIn profile owner. |
location.timezone | string | The timezone of the LinkedIn profile owner. |
location.timezone_offset | string | The timezone offset of the LinkedIn profile owner. Useful for optimizing cold emailing time. |
location.postal_code | string | The postal code of the LinkedIn profile owner. May be null if not available. |
location.raw | string | The raw location string as it appears on the LinkedIn profile. |
company | object | Contains in-depth real-time data about the company where the LinkedIn profile owner works. This object is not present if profile_only was set to true . |
company.name | string | The name of the company. |
company.is_catch_all | boolean | Indicates if the company's domain is a catch-all domain. |
company.size | string | The size of the company. |
company.logo | string | The URL to the company logo. |
company.linkedin | string | The LinkedIn URL of the company. |
company.website | string | The company's website URL. |
company.common_email_pattern | string | The common email pattern used by the company, if any. |
company.industry | string | The industry in which the company operates. |
company.founded_in | integer | The year the company was founded. |
company.description | string | A brief description of the company. |
company.location | object | The location of the company. All values are cleaned and standardized. |
company.location.country | string | The country where the company is located. |
company.location.country_code | string | The ISO 3166-1 alpha-2 country code of the company. |
Specific error codes
If you can't find the error message on this list, check our general error message.
Error code | Message | Meaning |
---|---|---|
400 | INVALID_LINKEDIN_URL | Invalid LinkedIn URL format. |
400 | UNREACHABLE_LINKEDIN_URL | The LinkedIn URL is valid but the profile cannot be accessed, for example, a private profile. |
Rate limit
The rate limits are:
- 60 calls per minute
- 5 calls per second (burst allowance)
When the limit is reached, we will return a 429
error code.
If you need your rate limit to be increased, feel free to contact us at [email protected]. The rate limit can easily be increased to 15+ requests per second (1000+ per minute).
Response time
With profile_only
omitted or set to false
: on average, a request takes 10 seconds, but can extend up to 20 seconds, as we are fetching a lot of real-time data.
With profile_only
set to true
: on average, a request takes 3 seconds, but can extend up to 6 seconds in rare cases. The response will not contains the email object nor the company object.
When performing a standard request without the optional profile_only
parameter, the response time for this request depends on several factors. We first extract information from LinkedIn in real-time, which includes both the user profile and company profile. We then initiate an email finding process that goes deep.
If a given lead doesn't have a company website, for instance, we'll attempt to find it using Google. If a lead has a catch-all email, we'll make several deep attempts to verify it, using novel approaches instead of standard SMTP pinging.
Our JSON is providing a comprehensive view of a person's LinkedIn profile, company profile, and email address, all in one request.
We recommend not setting a timeout for our requests.
Rest assured that we have established hard limits on our response time. There's no need to worry about your system hanging indefinitely while waiting for our response.