Title100/100
Get a LinkedIn profile
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Fetch one person's LinkedIn profile by its URL: name, headline, location, current company and title, positions, education, skills. It costs the provider's own price, taken from the Datacircle balance with no markup: up2data $0.00125 per profile found, free when it isn't found, up to $1 a day per account; harvestapi $0.0037 per profile found, every section of the profile. Every call is live: the provider is asked each time, so the profile is as it is today. The answer is the provider's own JSON plus datacircle_meta {provider, cost_usd, balance_usd}. If up2data answers its daily limit (429), call again with provider harvestapi; if the balance is too low (402), add_funds. Details: https://docs.datacircle.dev/pricing
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
url
The profile's LinkedIn URL, like https://www.linkedin.com/in/williamhgates
Clear enough to supply this argument.
provider
The data provider that fetches the profile, at its own price: up2data costs least; harvestapi returns every section of the profile, and answers when up2data is at its daily limit
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations100/100
All four behavior hints are declared.
{
"title": "Get a LinkedIn profile",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}Output schema81/100
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"required": [
"datacircle_meta"
],
"properties": {
"cost": {
"type": "number",
"description": "What HarvestAPI billed for the call, e.g. `0.0037` for a profile, `0.0023` for a profile it can't find. Datacircle charges you the same amount in dollars (`datacircle_meta.cost_usd`)."
},
"data": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Canonical profile URL."
},
"urn": {
"type": "string",
"description": "urn:li:member:{id} on enrich.\n"
},
"about": {
"type": "string",
"description": "The profile's About section."
},
"awards": {
"type": "array",
"description": "Honors and awards on the profile."
},
"skills": {
"type": "array",
"description": "Capped at the first 20 unless with_full_skills_and_endorsements is true, in which case every skill LinkedIn exposes is returned (up to LinkedIn's own 50-skill cap).\n"
},
"patents": {
"type": "array",
"description": "Patents on the profile."
},
"headline": {
"type": "string",
"description": "The line under the member's name on the profile."
},
"location": {
"type": "object",
"description": "Where the member is: `raw` as LinkedIn shows it, parsed into `city`, `region` and `country`."
},
"education": {
"type": "array",
"description": "Education history."
},
"full_name": {
"type": "string",
"description": "The member's full name."
},
"languages": {
"type": "array",
"description": "Language names listed on the profile. Omitted when none are listed."
},
"last_name": {
"type": "string",
"description": "The member's last name."
},
"positions": {
"type": "array",
"description": "Full experience history, current roles included."
},
"first_name": {
"type": "string",
"description": "The member's first name."
},
"is_premium": {
"type": "boolean",
"description": "`true` when the member has LinkedIn Premium."
},
"scraped_at": {
"type": "string",
"description": "When Up2Data scraped this profile from LinkedIn (ISO 8601)."
},
"linkedin_id": {
"type": "string",
"description": "Numeric LinkedIn member ID."
},
"profile_urn": {
"type": "string",
"description": "urn:li:fsd_profile:{ACo…}, the profile id Sales Navigator and LinkedIn messaging use.\n"
},
"publications": {
"type": "array",
"description": "Publications on the profile."
},
"certifications": {
"type": "array",
"description": "Licenses and certifications on the profile."
},
"primary_locale": {
"type": "string",
"description": "LinkedIn primary locale as language_COUNTRY, e.g. en_US."
},
"current_company": {
"type": "object",
"description": "The member's current role and its company."
},
"followers_count": {
"type": "integer",
"description": "Included when with_followers_and_connections is true (or listed in fields)."
},
"is_open_to_work": {
"type": "boolean",
"description": "`true` when the member shows they are open to work."
},
"connections_count": {
"type": "integer",
"description": "Included when with_followers_and_connections is true (or listed in fields)."
},
"public_identifier": {
"type": "string",
"description": "The profile's slug: linkedin.com/in/<public_identifier>."
},
"skill_endorsements": {
"type": "array",
"description": "Present when with_full_skills_and_endorsements is true (or listed in fields)."
},
"profile_picture_url": {
"type": "string",
"description": "LinkedIn headshot CDN URL."
},
"language_proficiencies": {
"type": "array",
"description": "The same languages as `languages`, with the proficiency the member chose, when they chose one."
}
},
"description": "Up2Data's profile record, every field as Up2Data documents it (docs.up2data.ai). `fields` in the request restricts it to the fields listed."
},
"free": {
"type": "boolean",
"description": "`true` when HarvestAPI didn't bill the call (a request it refuses)."
},
"meta": {
"type": "object",
"properties": {
"billed": {
"type": "boolean",
"description": "Whether Up2Data billed this call (`false`: it didn't, and you weren't charged). What this call costs you is `datacircle_meta.cost_usd`"
},
"reason": {
"type": "string",
"description": "Why Up2Data billed this call or not, in its words, e.g. `profile_found`."
},
"creditsUsed": {
"type": "integer",
"description": "Up2Data credits this call used (1 per profile found). What it costs you is `datacircle_meta.cost_usd`: $0.00125 per Up2Data credit"
}
},
"description": "Up2Data's billing metadata, minus `creditsRemaining`, `requestId` and `latencyMs` (our account with Up2Data, not yours)"
},
"error": {
"type": "string",
"description": "HarvestAPI's message when `element` is `null`, e.g. `Profile not found`."
},
"query": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The profile URL HarvestAPI read."
},
"profileId": {
"type": [
"string",
"null"
],
"description": "The profile's LinkedIn member id (`ACoAA…`); `null` when not found."
},
"publicIdentifier": {
"type": [
"string",
"null"
],
"description": "The profile's slug, linkedin.com/in/<publicIdentifier>; `null` when not found."
}
},
"description": "The request as HarvestAPI understood it: the `url` it read, with the `publicIdentifier` and `profileId` it resolved."
},
"status": {
"type": "integer",
"description": "HarvestAPI's own status, inside an HTTP `200`: `200` found, `404` not found, `400` a request it refuses."
},
"element": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The profile's LinkedIn member id (`ACoAA…`, case-sensitive)."
},
"about": {
"type": [
"string",
"null"
],
"description": "The profile's About section."
},
"photo": {
"type": [
"string",
"null"
],
"description": "The profile photo's URL (the largest size)."
},
"causes": {
"type": "array",
"description": "The causes the member cares about, e.g. `Education`."
},
"emails": {
"type": "array",
"description": "Always empty: Datacircle sends HarvestAPI the profile lookup only, without its email search."
},
"hiring": {
"type": "boolean",
"description": "`true` when the profile shows #Hiring."
},
"skills": {
"type": "array",
"description": "Every skill on the profile."
},
"courses": {
"type": "array",
"description": "Courses."
},
"creator": {
"type": "boolean",
"description": "`true` when the member has creator mode on."
},
"patents": {
"type": "array",
"description": "Patents."
},
"premium": {
"type": "boolean",
"description": "`true` when the member has LinkedIn Premium."
},
"featured": {
"type": [
"object",
"null"
],
"description": "The profile's Featured section; `null` when it has none."
},
"headline": {
"type": "string",
"description": "The line under the member's name on the profile."
},
"industry": {
"type": [
"object",
"null"
],
"description": "The member's industry, as LinkedIn classifies it: its `id` and `name`."
},
"lastName": {
"type": "string",
"description": "The member's last name."
},
"location": {
"type": "object",
"description": "Where the member is: `linkedinText` as LinkedIn shows it, and `parsed` into city, state and country."
},
"projects": {
"type": "array",
"description": "Projects."
},
"services": {
"type": [
"object",
"null"
],
"description": "The services the member offers (LinkedIn's Services page); `null` when none."
},
"verified": {
"type": "boolean",
"description": "`true` when LinkedIn shows the member as verified."
},
"websites": {
"type": "array",
"description": "The websites listed on the profile."
},
"education": {
"type": "array",
"description": "Every school on the profile."
},
"firstName": {
"type": "string",
"description": "The member's first name."
},
"interests": {
"type": "array",
"description": "What the member follows, by kind."
},
"languages": {
"type": "array",
"description": "The languages the member speaks."
},
"objectUrn": {
"type": "string",
"description": "LinkedIn's numeric id of the member."
},
"topSkills": {
"type": [
"array",
"null"
],
"description": "The skills the member put at the top of the profile."
},
"experience": {
"type": "array",
"description": "Every job on the profile, the newest first."
},
"influencer": {
"type": "boolean",
"description": "`true` when LinkedIn marks the member as an influencer (Top Voice)."
},
"openToWork": {
"type": "boolean",
"description": "`true` when the profile shows #OpenToWork."
},
"linkedinUrl": {
"type": "string",
"description": "The profile's LinkedIn URL."
},
"coverPicture": {
"type": [
"object",
"null"
],
"description": "The banner image behind the photo: `url` (the largest image) and `sizes`, every size LinkedIn serves."
},
"memorialized": {
"type": "boolean",
"description": "`true` when LinkedIn has memorialized the profile (the member died)."
},
"moreProfiles": {
"type": "array",
"description": "The profiles LinkedIn suggests next to this one (\"More profiles for you\")."
},
"publications": {
"type": "array",
"description": "Publications."
},
"registeredAt": {
"type": [
"string",
"null"
],
"description": "When the member joined LinkedIn (ISO 8601)."
},
"volunteering": {
"type": "array",
"description": "Volunteering."
},
"followerCount": {
"type": "integer",
"description": "How many people follow the member."
},
"organizations": {
"type": "array",
"description": "Organizations the member belongs to."
},
"primaryLocale": {
"type": "object",
"description": "The profile's main language."
},
"sectionTotals": {
"type": "object",
"description": "How many entries each section of the profile has on LinkedIn; a list above may hold fewer."
},
"certifications": {
"type": "array",
"description": "Licenses and certifications."
},
"profileActions": {
"type": "array",
"description": "The buttons the member added to the profile, e.g. `Visit my website`."
},
"profileLocales": {
"type": "array",
"description": "Every language the profile is written in."
},
"profilePicture": {
"type": [
"object",
"null"
],
"description": "The profile photo: `url` (the largest image) and `sizes`, every size LinkedIn serves."
},
"currentPosition": {
"type": "array",
"description": "The member's current jobs, the same shape as `experience`."
},
"honorsAndAwards": {
"type": "array",
"description": "Honors and awards."
},
"connectionsCount": {
"type": [
"integer",
"null"
],
"description": "The member's connections, as LinkedIn counts them (it shows `500+` past 500)."
},
"publicIdentifier": {
"type": "string",
"description": "The profile's slug: linkedin.com/in/<publicIdentifier>."
},
"composeOptionType": {
"type": [
"string",
"null"
],
"description": "How LinkedIn lets someone not connected write to the member, e.g. `PREMIUM_INMAIL`."
},
"multiLocaleHeadline": {
"type": "array",
"description": "The headline in each language the profile is written in."
},
"profileTopEducation": {
"type": "array",
"description": "The school the profile shows under the member's name, the same shape as `education`."
},
"receivedRecommendations": {
"type": "array",
"description": "Recommendations the member received."
}
},
"description": "A LinkedIn profile, as HarvestAPI answers it."
},
{
"type": "null"
}
],
"description": "The profile; `null` when HarvestAPI can't find it (`status` `404`) or refuses the request (`status` `400`)."
},
"retries": {
"type": "integer",
"description": "How many times HarvestAPI retried LinkedIn for this answer."
},
"entityId": {
"type": [
"string",
"null"
],
"description": "The profile's LinkedIn member id (`ACoAA…`), as `element.id`; `null` when not found."
},
"payments": {
"type": "array",
"items": {
"type": "string"
},
"description": "What HarvestAPI billed, by name: `linkedinProfile` for a profile, `linkedinProfileShort` for a lookup that found nothing."
},
"originalQuery": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The profile URL HarvestAPI got."
}
},
"description": "The request HarvestAPI got."
},
"datacircle_meta": {
"type": "object",
"properties": {
"cost_usd": {
"type": "number",
"description": "what this call cost, in dollars: the provider's price, no markup"
},
"provider": {
"type": "string",
"description": "which provider answered"
},
"balance_usd": {
"type": "number",
"description": "your balance after this call, in dollars (`balance_usd` in `GET /balance/`)"
}
},
"description": "Datacircle's only addition to the provider's answer"
}
},
"description": "The provider's own answer plus datacircle_meta. up2data: data (the profile) and meta (its billing). harvestapi: element (the profile, null when not found), status, cost and the request as HarvestAPI read it."
}