{
  "data": {
    "id": "xbjOPzXimKKKuJWlW",
    "actId": "9vth0rE0jEwndoFc6",
    "userId": "5zZJartdNTzGp6uU9",
    "startedAt": "2026-10-12T00:58:27.627Z",
    "finishedAt": "2026-10-12T00:58:47.121Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "API"
    },
    "stats": {
      "durationMillis": 19382,
      "runTimeSecs": 19.382,
      "computeUnits": 0.021535555555555554,
      "imageSizeBytes": 338261504
    },
    "options": {
      "useCache": false,
      "betaPackages": false,
      "tag": "doctor-canary",
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"LinkedIn Profile Scraper — Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"profileUrls\": {\n      \"title\": \"Profile URLs or public IDs\",\n      \"type\": \"array\",\n      \"description\": \"LinkedIn profile URLs or bare public IDs to scrape. Accepts full URLs (https://www.linkedin.com/in/williamhgates/) or bare slugs (satyanadella). No login, no cookies, no API key. Returns the public data LinkedIn renders to social-link-preview bots (name, headline, current company, location, education, photo, followers). Each returned profile is one charge.\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"https://www.linkedin.com/in/williamhgates/\",\n        \"satyanadella\"\n      ]\n    },\n    \"maxProfiles\": {\n      \"title\": \"Max profiles\",\n      \"type\": \"integer\",\n      \"description\": \"Cap the number of profiles scraped from the list (0 = all provided). Use to control cost on large inputs.\",\n      \"default\": 0,\n      \"minimum\": 0,\n      \"sectionCaption\": \"⚙️ Advanced\",\n      \"sectionDescription\": \"Optional limits and proxy. Defaults work for most runs.\"\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy configuration\",\n      \"type\": \"object\",\n      \"description\": \"Apify proxy settings. RESIDENTIAL is the prefilled default — it is reliable everywhere and accessible on every Apify plan (datacenter IPs are a paid add-on not all accounts have). The scraper rotates IPs automatically on any block. Leave as-is unless you need a custom setup.\",\n      \"editor\": \"proxy\",\n      \"sectionCaption\": \"⚙️ Advanced\",\n      \"prefill\": {\n        \"useApifyProxy\": true,\n        \"apifyProxyGroups\": [\n          \"RESIDENTIAL\"\n        ]\n      }\n    },\n    \"disableUsageStats\": {\n      \"type\": \"boolean\",\n      \"title\": \"Disable usage statistics\",\n      \"description\": \"See the README Usage statistics section for details.\",\n      \"default\": false,\n      \"editor\": \"checkbox\"\n    }\n  },\n  \"required\": [\n    \"profileUrls\"\n  ]\n}",
    "readme": "# LinkedIn Profile Scraper — No API Key, No Cookies\n\nTurn a list of LinkedIn profile URLs (or bare slugs) into clean, structured\nrecords — **with no login, no cookies, no `li_at`, and no API key.** Paste the\nURLs, press Run, get a tidy table back. Nothing to configure, nothing to expire.\n\n## What you'd use it for\n\n- **Clay / Make / n8n enrichment** — drop this into an enrichment column or an\n  automation step to hydrate a list of LinkedIn URLs into name, headline,\n  current company, and location. The output is a flat, predictable schema that\n  maps straight onto your CRM or spreadsheet.\n- **Recruiter & sales sourcing** — you already have the profile links (from a\n  search export, a scraped SERP, a conference list). This turns them into a\n  workable contact sheet: who they are, where they work, where they studied.\n- **List cleaning / dedup** — verify a profile still resolves and pull its\n  canonical URL + slug so your list stays current.\n\n## Why this one\n\nMost LinkedIn scrapers demand your session cookie (`li_at`) or a paid API key —\nwhich expires constantly, risks your account, and breaks mid-run. **This actor\nreads only the public data LinkedIn already serves to social-link-preview bots\n(the same SEO/JSON-LD surface that powers a link unfurl in Slack or X).** There\nis no account to ban and nothing for you to supply.\n\nIt also ships something rivals hide: **a `parse_confidence` score and a\n`parse_path` on every record**, so you can see exactly how complete each profile\nis and which extraction path produced it — instead of guessing whether a blank\nfield means \"no data\" or \"scraper broke\".\n\n## Output fields\n\n| Field | Description |\n|---|---|\n| `name`, `first_name`, `last_name` | Full name + split parts |\n| `headline` | Profile tagline / role summary |\n| `job_title` | Current job title(s) |\n| `current_company`, `current_company_url` | Current employer + its LinkedIn page |\n| `location`, `country` | Region (free-text) + country code |\n| `education` | List of schools `{name, url, start, end}` |\n| `experience` | List of companies `{name, url, start, end}` (from public JSON-LD) |\n| `photo_url` | Profile photo (LinkedIn CDN; time-limited — fetch promptly) |\n| `follower_count` | Followers, when LinkedIn exposes it (partial coverage) |\n| `description` | About / summary text, when present |\n| `same_as` | Linked socials (e.g. Twitter/GitHub) + canonical URL |\n| `recent_posts` | Recent post stubs `{headline, url, published}` (partial coverage) |\n| `profile_url`, `slug` | Canonical URL + vanity slug |\n| `parse_path` | Which source + UA produced the record (e.g. `jsonld:facebookexternalhit/1.1`) |\n| `parse_confidence` | 1.0 = full JSON-LD · ~0.6 = OG-meta only · lower = partial |\n| `warnings` | Machine-readable quality codes (e.g. `no_work_history`, `og_only`) |\n\n## Honest about the anonymous data tier\n\nThis scraper reads **public, no-cookies data only**. That is deliberate — it is\nwhat keeps it reliable and account-safe. Some fields are simply not rendered to\nanonymous visitors, and **we return them as `null` rather than fabricating\nthem**:\n\n- **Work history is partial.** LinkedIn's public JSON-LD exposes current/past\n  *company stubs* (name + start year), not the full dated role-by-role history.\n  A profile with **no public work history** gets `current_company` /\n  `experience` = `null` and a `no_work_history` warning — never a made-up\n  employer.\n- **Not available anonymously (always `null`):** full dated work history,\n  skills, certifications, recommendations, and contact email/phone. Those need a\n  logged-in session, which we intentionally do not use.\n- **~30–40% of profiles have no JSON-LD.** For those we fall back to Open Graph\n  meta (name, headline, photo) and mark the record `parse_path: og:*` with a\n  medium `parse_confidence`. You always know which tier you got.\n\n## Reliability\n\nRequests use social-preview headers and run through **Apify Datacenter proxy by\ndefault** (cheap — LinkedIn allowlists this preview surface), auto-escalating to\n**Residential** if datacenter IPs get blocked. Polite per-IP pacing keeps runs\nclean. Proxy usage is billed to your Apify account; there is no external proxy\nor proxy key to bring.\n\n## Pricing\n\nPay-per-result: you are charged once per profile record returned. Runs that\nreturn nothing for a URL (private/blocked) are not charged for that URL.\n\n## Compliance\n\nThis actor collects **only publicly available information** that LinkedIn serves\nto anonymous social-preview bots — no login, no access-gated retrieval of an\nauthentication wall. Scraping public data is broadly lawful (see *hiQ v.\nLinkedIn*), but **you are the data controller** for whatever you collect: use it\nfor legitimate B2B purposes, honor GDPR/CCPA and individuals' rights, and do not\nuse it for spam or any purpose prohibited by applicable law or LinkedIn's terms.\n<!-- seo-crosslinks:v1 START -->\n\n## More scrapers from our toolkit\n\nBuilding a data pipeline? These actors pair well with this one — each runs on your own Apify account with the same pay-per-result pricing, no subscription:\n\n- [PagesJaunes Directory Scraper](https://apify.com/bovi/pagesjaunes-directory)\n- [Skip Trace People Finder](https://apify.com/bovi/skip-trace-people-finder)\n- [Trustpilot Reviews Scraper](https://apify.com/bovi/trustpilot-reviews-scraper)\n- [Upwork Talent Scraper](https://apify.com/bovi/upwork-talent-scraper)\n- [Website Contact Extractor](https://apify.com/bovi/website-contact-extractor)\n- [Yellowpages Scraper](https://apify.com/bovi/yellowpages-scraper)\n\nChain any of them together from the **Integrations** tab (the *Run succeeded* trigger) to build a multi-step workflow — one actor's output feeds the next.\n\n<!-- seo-crosslinks:v1 END -->\n\n<!-- usage-stats:v1 -->\n\n## Rate this Actor\n\nIf LinkedIn Profile Scraper saved you time, please rate it on the Apify Store. A rating takes a few seconds and helps other people find a working scraper. If something did not work, open an issue on the Actor page and we will fix it.\n\n## Usage statistics\n\nThis Actor creates a small, content-free summary at the end of each run. It is used only to monitor reliability and improve this Actor. A copy is saved as `USAGE_STATS` in your own Apify key-value store, so you can see the exact record created for your run.\n\nSet `disableUsageStats` to `true` in the input to opt out. Nothing is sent then; your `USAGE_STATS` record only says that statistics were disabled.\n\nOnly these fields are recorded:\n\n- schema version, Actor name and build number;\n- UTC start and finish hour (not a precise timestamp);\n- run duration, number of results and time to the first result, each as a coarse range;\n- whether the result was empty, the end status, and an error type from a fixed list;\n- memory setting and counts of charged events;\n- names of the input fields you set, never their values;\n- the selected option for input fields that offer a fixed list of choices (for example a sort order).\n\nWe do not collect input text, search terms, URLs, domains, usernames, email addresses, names, proxy credentials, tokens, scraped records, output items, raw error messages, stack traces, or hashes of any of those values. Records are kept for no longer than 13 months, used only as aggregated operational statistics, and never sold or shared.\n\n### Additional fields (Phase 2)\n\nThis Actor also records your Apify user ID, whether Apify marks the account as paying, the size range of list inputs, the selected country when the input offers a fixed list of countries, and one category from a fixed Actor taxonomy. We use these fields only for aggregate reliability, repeat-use and cross-Actor analysis; reports suppress any cell with fewer than five distinct users.\n\nThe same `disableUsageStats: true` input flag turns these fields off too. The user ID is removed after 13 months; we do not export, sell, share, or attempt to re-identify this data.\n\n### Run-outcome signals (v2)\n\nTo learn whether a run did what it was asked to do, the record also holds a few more coarse ranges and yes/no flags. None of them contains content:\n\n- the result limit you asked for (a range, when the input has one) and what share of it was delivered;\n- results delivered per input item you listed (a range);\n- output quality as ranges: how fully the result fields were filled, the share of rows that look like errors, the share of duplicate rows, and how many different fields appeared. These are counted in memory while results are saved; no result content is kept;\n- how the run was started (console, API, schedule, webhook, another Actor);\n- how it ended: stopped by you, timed out, reached the requested limit, stopped by the charge limit, and how many times the platform moved the run;\n- if this Actor reports it: how many items to process worked or failed (ranges) and one failure reason from a fixed list;\n- a short code made from the names of the input fields you set, never their values.\n\n### Repeat-run fingerprint (v2)\n\nWhen your Apify user ID is recorded (see above), the record also holds an 8-character one-way code made from your input (proxy settings left out) and this Actor's name. It only lets us see that the same account ran the same input again soon after an unsatisfying run; we never see the input itself. It is stored only in the database, never published, and reports use it in aggregate with the same five-user minimum. It is the one exception to the statement above that no hashes are collected, and `disableUsageStats: true` turns it off.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "linkedin-profile-scraper",
      "title": "LinkedIn Profile Scraper — No Cookies, No Key | $3.9/1K",
      "description": "Scrape public LinkedIn profiles with no login, no cookies, no API key. Returns name, headline, current company, location, education, photo, followers + a parse_confidence score per record. Drop-in for Clay / Make / n8n enrichment and recruiter sourcing. Pay per profile.",
      "version": "0.1",
      "buildTag": "latest",
      "dockerfile": "../Dockerfile",
      "input": {
        "title": "LinkedIn Profile Scraper — Input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "profileUrls": {
            "title": "Profile URLs or public IDs",
            "type": "array",
            "description": "LinkedIn profile URLs or bare public IDs to scrape. Accepts full URLs (https://www.linkedin.com/in/williamhgates/) or bare slugs (satyanadella). No login, no cookies, no API key. Returns the public data LinkedIn renders to social-link-preview bots (name, headline, current company, location, education, photo, followers). Each returned profile is one charge.",
            "editor": "stringList",
            "prefill": [
              "https://www.linkedin.com/in/williamhgates/",
              "satyanadella"
            ]
          },
          "maxProfiles": {
            "title": "Max profiles",
            "type": "integer",
            "description": "Cap the number of profiles scraped from the list (0 = all provided). Use to control cost on large inputs.",
            "default": 0,
            "minimum": 0,
            "sectionCaption": "⚙️ Advanced",
            "sectionDescription": "Optional limits and proxy. Defaults work for most runs."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify proxy settings. RESIDENTIAL is the prefilled default — it is reliable everywhere and accessible on every Apify plan (datacenter IPs are a paid add-on not all accounts have). The scraper rotates IPs automatically on any block. Leave as-is unless you need a custom setup.",
            "editor": "proxy",
            "sectionCaption": "⚙️ Advanced",
            "prefill": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "disableUsageStats": {
            "type": "boolean",
            "title": "Disable usage statistics",
            "description": "See the README Usage statistics section for details.",
            "default": false,
            "editor": "checkbox"
          }
        },
        "required": [
          "profileUrls"
        ]
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "fields": {},
          "views": {
            "overview": {
              "title": "Profiles Overview",
              "description": "One row per public LinkedIn profile",
              "transformation": {
                "fields": [
                  "name",
                  "headline",
                  "job_title",
                  "current_company",
                  "location",
                  "country",
                  "education",
                  "follower_count",
                  "photo_url",
                  "profile_url",
                  "same_as",
                  "parse_path",
                  "parse_confidence",
                  "warnings"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "name": {
                    "label": "Name",
                    "format": "text"
                  },
                  "headline": {
                    "label": "Headline",
                    "format": "text"
                  },
                  "job_title": {
                    "label": "Job Title",
                    "format": "text"
                  },
                  "current_company": {
                    "label": "Current Company",
                    "format": "text"
                  },
                  "location": {
                    "label": "Location",
                    "format": "text"
                  },
                  "country": {
                    "label": "Country",
                    "format": "text"
                  },
                  "education": {
                    "label": "Education",
                    "format": "array"
                  },
                  "follower_count": {
                    "label": "Followers",
                    "format": "number"
                  },
                  "photo_url": {
                    "label": "Photo",
                    "format": "link"
                  },
                  "profile_url": {
                    "label": "Profile URL",
                    "format": "link"
                  },
                  "same_as": {
                    "label": "Linked Socials",
                    "format": "array"
                  },
                  "parse_path": {
                    "label": "Parse Path",
                    "format": "text"
                  },
                  "parse_confidence": {
                    "label": "Confidence",
                    "format": "number"
                  },
                  "warnings": {
                    "label": "Warnings",
                    "format": "array"
                  }
                }
              }
            }
          }
        }
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "LinkedIn Profile Scraper Output",
        "description": "One record per public LinkedIn profile (name, headline, current company, location, education, photo, followers + parse_confidence).",
        "properties": {
          "results": {
            "type": "string",
            "title": "Results",
            "description": "Dataset of profile records (name, headline, job_title, current_company, location, education, photo_url, follower_count, parse_confidence).",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "categories": [
        "LEAD_GENERATION",
        "BUSINESS"
      ],
      "seoTitle": "LinkedIn Profile Scraper — No Cookies, No Key $3.9/1K",
      "seoDescription": "Scrape public LinkedIn profiles with no login or cookies: name, headline, company, location, education, photo, followers + parse_confidence. For Clay/Make/n8n.",
      "readme": "# LinkedIn Profile Scraper — No API Key, No Cookies\n\nTurn a list of LinkedIn profile URLs (or bare slugs) into clean, structured\nrecords — **with no login, no cookies, no `li_at`, and no API key.** Paste the\nURLs, press Run, get a tidy table back. Nothing to configure, nothing to expire.\n\n## What you'd use it for\n\n- **Clay / Make / n8n enrichment** — drop this into an enrichment column or an\n  automation step to hydrate a list of LinkedIn URLs into name, headline,\n  current company, and location. The output is a flat, predictable schema that\n  maps straight onto your CRM or spreadsheet.\n- **Recruiter & sales sourcing** — you already have the profile links (from a\n  search export, a scraped SERP, a conference list). This turns them into a\n  workable contact sheet: who they are, where they work, where they studied.\n- **List cleaning / dedup** — verify a profile still resolves and pull its\n  canonical URL + slug so your list stays current.\n\n## Why this one\n\nMost LinkedIn scrapers demand your session cookie (`li_at`) or a paid API key —\nwhich expires constantly, risks your account, and breaks mid-run. **This actor\nreads only the public data LinkedIn already serves to social-link-preview bots\n(the same SEO/JSON-LD surface that powers a link unfurl in Slack or X).** There\nis no account to ban and nothing for you to supply.\n\nIt also ships something rivals hide: **a `parse_confidence` score and a\n`parse_path` on every record**, so you can see exactly how complete each profile\nis and which extraction path produced it — instead of guessing whether a blank\nfield means \"no data\" or \"scraper broke\".\n\n## Output fields\n\n| Field | Description |\n|---|---|\n| `name`, `first_name`, `last_name` | Full name + split parts |\n| `headline` | Profile tagline / role summary |\n| `job_title` | Current job title(s) |\n| `current_company`, `current_company_url` | Current employer + its LinkedIn page |\n| `location`, `country` | Region (free-text) + country code |\n| `education` | List of schools `{name, url, start, end}` |\n| `experience` | List of companies `{name, url, start, end}` (from public JSON-LD) |\n| `photo_url` | Profile photo (LinkedIn CDN; time-limited — fetch promptly) |\n| `follower_count` | Followers, when LinkedIn exposes it (partial coverage) |\n| `description` | About / summary text, when present |\n| `same_as` | Linked socials (e.g. Twitter/GitHub) + canonical URL |\n| `recent_posts` | Recent post stubs `{headline, url, published}` (partial coverage) |\n| `profile_url`, `slug` | Canonical URL + vanity slug |\n| `parse_path` | Which source + UA produced the record (e.g. `jsonld:facebookexternalhit/1.1`) |\n| `parse_confidence` | 1.0 = full JSON-LD · ~0.6 = OG-meta only · lower = partial |\n| `warnings` | Machine-readable quality codes (e.g. `no_work_history`, `og_only`) |\n\n## Honest about the anonymous data tier\n\nThis scraper reads **public, no-cookies data only**. That is deliberate — it is\nwhat keeps it reliable and account-safe. Some fields are simply not rendered to\nanonymous visitors, and **we return them as `null` rather than fabricating\nthem**:\n\n- **Work history is partial.** LinkedIn's public JSON-LD exposes current/past\n  *company stubs* (name + start year), not the full dated role-by-role history.\n  A profile with **no public work history** gets `current_company` /\n  `experience` = `null` and a `no_work_history` warning — never a made-up\n  employer.\n- **Not available anonymously (always `null`):** full dated work history,\n  skills, certifications, recommendations, and contact email/phone. Those need a\n  logged-in session, which we intentionally do not use.\n- **~30–40% of profiles have no JSON-LD.** For those we fall back to Open Graph\n  meta (name, headline, photo) and mark the record `parse_path: og:*` with a\n  medium `parse_confidence`. You always know which tier you got.\n\n## Reliability\n\nRequests use social-preview headers and run through **Apify Datacenter proxy by\ndefault** (cheap — LinkedIn allowlists this preview surface), auto-escalating to\n**Residential** if datacenter IPs get blocked. Polite per-IP pacing keeps runs\nclean. Proxy usage is billed to your Apify account; there is no external proxy\nor proxy key to bring.\n\n## Pricing\n\nPay-per-result: you are charged once per profile record returned. Runs that\nreturn nothing for a URL (private/blocked) are not charged for that URL.\n\n## Compliance\n\nThis actor collects **only publicly available information** that LinkedIn serves\nto anonymous social-preview bots — no login, no access-gated retrieval of an\nauthentication wall. Scraping public data is broadly lawful (see *hiQ v.\nLinkedIn*), but **you are the data controller** for whatever you collect: use it\nfor legitimate B2B purposes, honor GDPR/CCPA and individuals' rights, and do not\nuse it for spam or any purpose prohibited by applicable law or LinkedIn's terms.\n<!-- seo-crosslinks:v1 START -->\n\n## More scrapers from our toolkit\n\nBuilding a data pipeline? These actors pair well with this one — each runs on your own Apify account with the same pay-per-result pricing, no subscription:\n\n- [PagesJaunes Directory Scraper](https://apify.com/bovi/pagesjaunes-directory)\n- [Skip Trace People Finder](https://apify.com/bovi/skip-trace-people-finder)\n- [Trustpilot Reviews Scraper](https://apify.com/bovi/trustpilot-reviews-scraper)\n- [Upwork Talent Scraper](https://apify.com/bovi/upwork-talent-scraper)\n- [Website Contact Extractor](https://apify.com/bovi/website-contact-extractor)\n- [Yellowpages Scraper](https://apify.com/bovi/yellowpages-scraper)\n\nChain any of them together from the **Integrations** tab (the *Run succeeded* trigger) to build a multi-step workflow — one actor's output feeds the next.\n\n<!-- seo-crosslinks:v1 END -->\n\n<!-- usage-stats:v1 -->\n\n## Rate this Actor\n\nIf LinkedIn Profile Scraper saved you time, please rate it on the Apify Store. A rating takes a few seconds and helps other people find a working scraper. If something did not work, open an issue on the Actor page and we will fix it.\n\n## Usage statistics\n\nThis Actor creates a small, content-free summary at the end of each run. It is used only to monitor reliability and improve this Actor. A copy is saved as `USAGE_STATS` in your own Apify key-value store, so you can see the exact record created for your run.\n\nSet `disableUsageStats` to `true` in the input to opt out. Nothing is sent then; your `USAGE_STATS` record only says that statistics were disabled.\n\nOnly these fields are recorded:\n\n- schema version, Actor name and build number;\n- UTC start and finish hour (not a precise timestamp);\n- run duration, number of results and time to the first result, each as a coarse range;\n- whether the result was empty, the end status, and an error type from a fixed list;\n- memory setting and counts of charged events;\n- names of the input fields you set, never their values;\n- the selected option for input fields that offer a fixed list of choices (for example a sort order).\n\nWe do not collect input text, search terms, URLs, domains, usernames, email addresses, names, proxy credentials, tokens, scraped records, output items, raw error messages, stack traces, or hashes of any of those values. Records are kept for no longer than 13 months, used only as aggregated operational statistics, and never sold or shared.\n\n### Additional fields (Phase 2)\n\nThis Actor also records your Apify user ID, whether Apify marks the account as paying, the size range of list inputs, the selected country when the input offers a fixed list of countries, and one category from a fixed Actor taxonomy. We use these fields only for aggregate reliability, repeat-use and cross-Actor analysis; reports suppress any cell with fewer than five distinct users.\n\nThe same `disableUsageStats: true` input flag turns these fields off too. The user ID is removed after 13 months; we do not export, sell, share, or attempt to re-identify this data.\n\n### Run-outcome signals (v2)\n\nTo learn whether a run did what it was asked to do, the record also holds a few more coarse ranges and yes/no flags. None of them contains content:\n\n- the result limit you asked for (a range, when the input has one) and what share of it was delivered;\n- results delivered per input item you listed (a range);\n- output quality as ranges: how fully the result fields were filled, the share of rows that look like errors, the share of duplicate rows, and how many different fields appeared. These are counted in memory while results are saved; no result content is kept;\n- how the run was started (console, API, schedule, webhook, another Actor);\n- how it ended: stopped by you, timed out, reached the requested limit, stopped by the charge limit, and how many times the platform moved the run;\n- if this Actor reports it: how many items to process worked or failed (ranges) and one failure reason from a fixed list;\n- a short code made from the names of the input fields you set, never their values.\n\n### Repeat-run fingerprint (v2)\n\nWhen your Apify user ID is recorded (see above), the record also holds an 8-character one-way code made from your input (proxy settings left out) and this Actor's name. It only lets us see that the same account ran the same input again soon after an unsatisfying run; we never see the input itself. It is stored only in the database, never published, and reports use it in aggregate with the same five-user minimum. It is the one exception to the statement above that no hashes are collected, and `disableUsageStats: true` turns it off.\n"
    },
    "buildNumber": "0.1.13",
    "imageDigest": "56dd2adf509a5c4168d877c253cd7b6aa431f80a8285128745d614c3302cb127",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "0.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.021535555555555554
    }
  }
}