LinkedIn Company 360 — Firmographics + Hiring + Ads Fused
Pricing
from $70.00 / 1,000 results
LinkedIn Company 360 — Firmographics + Hiring + Ads Fused
One record per company fusing LinkedIn firmographics + live hiring signals (open roles, velocity, departments) + active advertising (ad count, formats, creatives) — entity-resolved by domain, provenance-tagged. The 360° company view no single-surface scraper gives. No login.
Pricing
from $70.00 / 1,000 results
Rating
0.0
(0)
Developer
Berkan Kaplan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
LinkedIn Company 360 — Firmographics + Hiring + Ads Fused 🔗
foXLabs LinkedIn series: Company profiles · Jobs · Hiring signals · Ad tracker · Ad discovery
🎉 Turn LinkedIn company pages into one record per company — firmographics from the public company page, a hiring signal from LinkedIn's public job search, an advertising signal from the LinkedIn Ad Library and, when an entity can be identified, the company's ultimate owner. Built for B2B sales, account research and competitive intelligence.
🔍 What is LinkedIn Company 360 — and when should you use it?
Give this Actor LinkedIn company slugs (stripe) or company page URLs (https://www.linkedin.com/company/datadog/) and it returns one record per company, built from pages LinkedIn shows without logging in: the company page, LinkedIn's public job search filtered by the company's LinkedIn id, and the LinkedIn Ad Library. An optional ownership lookup adds GLEIF and UK Companies House data. Every run reads the pages live.
Use it when you need: a one-row account brief — size, industry, HQ, website — plus whether the company is hiring (how many roles, how fast) and advertising on LinkedIn.
Use something else when: you want to find companies by name or keyword (this Actor needs the LinkedIn slug or company URL), you need the individual job postings (see LinkedIn Hiring Signals, which returns the job list), or you need an official registry extract.
🤖 Use with AI agents
Already on the Apify MCP server? Ask for this Actor by name: foxlabs/linkedin-company-360.
Your agent can pay for its own runs. This Actor is pay-per-event with agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — no Apify account or API token of its own. Billing is the same either way: per delivered company record — rows that only report a failed lookup are free from 25 September 2026.
Otherwise paste this into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
I want LinkedIn company records from the Apify Actor `foxlabs/linkedin-company-360`.Input: `companies` is a list of LinkedIn company slugs or company page URLs (not free-text names). `includeHiring`, `includeAdvertising` and `includeOwnership` switch the three signals (all on by default).Start with: {"companies":["stripe","datadog"]}Ask me which companies to look up, run the Actor, then summarise the rows as a table.
The machine-readable API, MCP config and OpenAPI definition live at apify.com/foxlabs/linkedin-company-360.md.
📋 Overview
Everything you need to turn a LinkedIn company page into a qualified account record — in one Actor, with no login, cookies or API key.
Why teams pick this Actor:
- ✅ One row, several sources — company page, public job search and Ad Library in a single record; hiring and ads are looked up by the LinkedIn company id read from the company page.
- 📈 Hiring signal — open roles found, roles posted in the last 7 and 30 days, a momentum band and a rough split by job function.
- 📣 Advertising signal — ads found in the LinkedIn Ad Library for the company (first result page of the worldwide search and of 8 country searches, capped at 60), their formats and up to three ad texts.
- 🧭 Ultimate owner (KYB) — added when an entity can be identified from the company's own legal pages or GLEIF; left out otherwise.
- 🏷️ Honest gaps —
sourcesnames where each part came from; a module that was switched off or had no company id to query is labellednot collected, and one LinkedIn refused is labelledblocked by LinkedInwithnullcounts — never reported as "no activity". - 💰 Pay per record — $0.07 per complete company record, no subscription.
- 🤖 Agent-ready — MCP + x402 agentic payments.
✨ Features
- 🔗 Slug or URL in —
stripeandhttps://www.linkedin.com/company/stripe/give the same company; letter case is ignored and duplicates are merged; a URL with a broken %-escape becomes anerrorrow instead of stopping the run. - 🏢 Firmographics — name, LinkedIn company id, website and domain, industry, HQ, founding year, company description, follower count and LinkedIn's employee figure.
- 📈 Hiring (
includeHiring) — pages through LinkedIn's public job search for the company id until 200 roles are collected; momentumhigh/medium/low/not-hiring, orunknown (capped)when the cap makes the band unknowable. If LinkedIn refuses a page after 4 attempts, the hiring block is reported asblockedwithnullcounts. - 📣 Advertising (
includeAdvertising) — searches the Ad Library for the company id worldwide and in 8 countries (DE, FR, GB, NL, US, CA, AU, IN), counts distinct ads up to 60, and opens up to 12 of them for formats and texts. Refused country searches are counted insearchesRefused; if the worldwide search is refused, the block is reported asblockedwithnullcounts. - 🧭 Ownership (
includeOwnership) — a UK registration number from the company's own legal pages, confirmed in Companies House, or a GLEIF name match; UK holding chains are followed through Companies House PSC records, and GLEIF's ultimate parent is used for LEI entities. - 🔁 One proxy session per company — the company page, job search, Ad Library searches and legal pages of one company share one Apify Proxy session; a LinkedIn refusal retires it and the request is retried from a fresh one (up to 3 sessions per company and 10 new sessions per run, each logged).
- 🧾 Summary line —
signalSummary, e.g.hiring (high, 209+ roles) · advertising (60 ads).
🎬 Quick Start
curl -X POST "https://api.apify.com/v2/acts/foxlabs~linkedin-company-360/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"companies":["stripe","datadog"]}'
🚀 Getting Started (3 steps)
- Choose your companies — the slug is the part after
/company/in the LinkedIn page URL; full company page URLs work too. - Pick the signals — hiring, advertising and ownership are on by default; switching one off skips its requests.
- Run and export — download the dataset as JSON, CSV, Excel, HTML or XML.
📥 Input
{"companies":["stripe","datadog"],"proxyConfiguration":{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]}}
| Field | Type | Description |
|---|---|---|
companies | array | LinkedIn company slugs (stripe) or company page URLs (https://www.linkedin.com/company/datadog/). A value that is neither — for example a name with spaces — is skipped without a row or log line; a company URL with a broken %-escape becomes an error row and the other companies still run. If no value is a slug or company URL, the run fails with a message. |
includeHiring | boolean | Default on. Hiring signal from LinkedIn's public job search for the company id; collection stops once 200 roles are collected. |
includeAdvertising | boolean | Default on. Advertising signal from the LinkedIn Ad Library for the company id; up to 60 ads counted, up to 12 opened. |
includeOwnership | boolean | Default on. Ultimate-owner lookup (GLEIF, UK Companies House, the company's own legal pages); the block is added when an entity is identified — see the FAQ for the rule. |
proxyConfiguration | object | Default: Apify Residential proxy. All requests about one company — its page, job search, Ad Library searches and legal pages — go through one proxy session; the GLEIF and Companies House API calls do not use the proxy. When LinkedIn refuses a request (HTTP 403, 999, a 429 that survives one back-off, or an empty page), the session is retired and the request is retried from a fresh one: at most 3 sessions per company and 10 new sessions per run, each rotation logged and counted in the run's last log line. A request is tried up to 4 times. |
📤 Output
One row per company. A row that could not be completed carries an error field and, from 25 September 2026, is not charged:
- the company page could not be loaded —
companySlug,error: "company page unreachable",scrapedAt; - the input was a company URL with a broken %-escape —
companyInput,error: "malformed company URL (broken %-escape)",scrapedAt; - the company id was not found on the page while hiring or advertising was requested;
- LinkedIn refused the job search or the worldwide Ad Library search — that block then reads
blocked: truewithnullcounts.
Fields LinkedIn does not show for a company are left out of the row instead of being written as empty values.
| Field | Description |
|---|---|
companyName / companySlug / companyId | Company name from the page (falls back to the slug), the slug you gave, LinkedIn's numeric company id |
companyInput | The value you gave, on a row for a malformed company URL |
companyLinkedInUrl | https://www.linkedin.com/company/<slug> |
website / domain | Website listed on the company page and its host name without www. |
industry / hq / founded | LinkedIn's industry label, headquarters (city, region, country) and founding year |
employeeCount | LinkedIn's employee figure — the "View all N employees" count of members who list the company, not the company-size band |
followers / description | LinkedIn followers and the company description |
hiring | openJobCount, openJobCountIsCapped (present only when the 200-role cap was reached — counts are then lower bounds), isHiring, hiringMomentum, momentumMeasurable, postedLast7d, postedLast30d, topDepartments[] (up to 6 {name, count} — a rough split from job-title keyword stems, see the FAQ); blocked: true with null counts when LinkedIn refused a job-search page |
advertising | isAdvertising, activeAdCount (distinct ads found, up to 60), activeAdCountIsCapped (present only at 60), searchesRefused (present when LinkedIn refused some of the 9 searches — the count is then a smaller lower bound), adFormats[] (image / video counts over the ads opened), sampleAdCreatives[] (up to 3 ad texts, first 140 characters); blocked: true with null counts when the worldwide search was refused |
ownership | registeredEntity, companyNumber (UK), jurisdiction, ultimateBeneficialOwner, ultimateOwnerCountry, ultimateOwnerType (individual / corporate / self/listed), crossBorderOwnership, ownershipChain[], ownershipConfidence, ownershipSource — present only when an entity was identified |
signalSummary / signalsNotCollected | One-line summary (a refused module reads "blocked by LinkedIn"); the modules that were not collected (switched off, or no company id to query) |
sources | Where each part came from (firmographics, hiring, advertising) |
note | Present when the company id could not be read from the page |
error / scrapedAt | Why the row is incomplete (see above) — such rows are not charged from 25 September 2026; ISO timestamp on every row |
Sample — Datadog, captured 2026-09-10 with {"companies":["datadog"],"includeHiring":false,"includeOwnership":false} (lists trimmed to two entries). LinkedIn refused 5 of the 9 Ad Library searches in this run (HTTP 403); the worldwide search went through, so the count is kept and searchesRefused says so:
{"companyName": "Datadog","companySlug": "datadog","companyId": "1066442","companyLinkedInUrl": "https://www.linkedin.com/company/datadog","domain": "datadoghq.com","employeeCount": 10656,"industry": "Software Development","hq": "New York, NY, US","followers": 581998,"website": "http://datadoghq.com","founded": 2010,"description": "Datadog is the essential monitoring platform for cloud applications. We bring together data from servers, containers, databases, and third-party services to make your stack entirely observable. These capabilities help DevOps teams avoid downtime, resolve performance issues, and ensure customers are getting the best user experience.","advertising": {"isAdvertising": true,"activeAdCount": 28,"searchesRefused": 5,"adFormats": [{ "format": "image", "count": 7 }],"sampleAdCreatives": ["When applications slow down, the root cause may be deeper than the service layer. Learn how to connect application traces to database activi","Product managers have access to more data than ever, but turning that data into clear decisions can still be difficult. Download the Product"]},"signalSummary": "advertising (28 ads) · hiring not collected","signalsNotCollected": ["hiring"],"sources": {"firmographics": "LinkedIn company page","advertising": "LinkedIn Ad Library (public)"},"scrapedAt": "2026-09-10T16:19:20.393Z"}
The hiring and ownership blocks for Datadog from a run with all modules on, the same day (list trimmed to two entries):
{"hiring": {"openJobCount": 207,"openJobCountIsCapped": true,"isHiring": true,"hiringMomentum": "high","momentumMeasurable": true,"postedLast7d": 65,"postedLast30d": 205,"topDepartments": [{ "name": "Sales", "count": 78 },{ "name": "Engineering", "count": 44 }]},"ownership": {"registeredEntity": "DATADOG, INC.","jurisdiction": "US","ultimateBeneficialOwner": "DATADOG, INC.","ultimateOwnerCountry": "US","ultimateOwnerType": "self/listed","crossBorderOwnership": false,"ownershipConfidence": 0.9,"ownershipSource": "gleif + GLEIF + Companies House PSC"}}
💼 Use cases
1. Account briefs — a one-row profile before outreach. Input: your target accounts' LinkedIn slugs. Output: size, industry, HQ, website, hiring and advertising signals. Use: qualify the account and open the conversation with something current.
2. Prioritise by signal — find the accounts that are moving.
Input: a list of accounts. Output: hiringMomentum, postedLast7d, isAdvertising. Use: call first the accounts that are hiring fast or advertising on LinkedIn.
3. Competitive watch — schedule a weekly run on competitors. Input: competitors' slugs. Output: open-role counts and velocity, plus a count and sample texts of their recent LinkedIn ads. Use: spot a hiring push, a slowdown or a campaign launch.
4. KYB pre-check — see who may be behind a counterparty.
Input: counterparties' LinkedIn pages. Output: the ownership block where an entity is identified. Use: a lead for holding-company or cross-border ownership — confirm it in the official register before relying on it.
🔗 Integration
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('foxlabs/linkedin-company-360').call({"companies":["stripe","datadog"]});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('foxlabs/linkedin-company-360').call(run_input={"companies": ["stripe", "datadog"]})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item)
Automation (n8n / Zapier / Make): schedule or webhook → HTTP request to the Actor API with your companies → handle the JSON dataset → push to a sheet, CRM or dashboard.
📊 Pricing
Pay-per-event: $0.07 per delivered company record (≈ $70 per 1,000 companies), plus Apify's run-start event ($0.00005 per GB of run memory — $0.0001 per run at 2 GB, the most this Actor allows). A row counts as delivered only when it has no error field. Compute and proxy traffic are not billed to you: Apify's "Pay per event + usage" option is off for this Actor, so the Residential proxy traffic — 1.1–1.6 MB per company in our runs of 2026-09-10, roughly $8–12 per 1,000 companies at Apify's $8/GB — is paid by the developer. From 25 September 2026, rows that only report a failed lookup (error) are free. Until then Apify still counts them as dataset items. Current pricing.
❓ FAQ
Where does the data come from? From pages LinkedIn shows without logging in: the company page (linkedin.com/company/<slug>), LinkedIn's public job search filtered by the company id, and the LinkedIn Ad Library. The ownership lookup uses the GLEIF and UK Companies House APIs and the legal pages of the company's own website (/terms, /legal, /privacy-policy, /about-us, /company-information and the home page). No login, cookies or LinkedIn API key.
Can I search by company name? No. The Actor needs the LinkedIn slug or the company page URL: stripe works because it is Stripe's slug, while a name with spaces such as Palo Alto Networks is skipped. The slug is in the page URL — linkedin.com/company/<slug>/.
What is employeeCount? The employee figure from the page's structured data — the same number as LinkedIn's "View all N employees" link, i.e. members who list the company as their employer. It is not the company-size band: on 2026-09-10 Stripe's page showed "View all 16,882 employees" and a company size of 5,001–10,000 employees.
How is hiring momentum decided? high when at least 5 roles were posted in the last 7 days or at least 15 in the last 30; medium when at least 5 in the last 30 days; low otherwise; not-hiring when no open role is found. Collection stops once 200 roles are collected — the last page can take it slightly past 200 (201 to 209 in our runs) — and the counts are then lower bounds: a capped set that already reaches high stays high, anything else becomes unknown (capped) with momentumMeasurable: false.
Is a 0 a real zero? Yes. If LinkedIn refuses a job-search page, or the worldwide Ad Library search, even after the Actor retried from fresh proxy sessions, that block reads blocked: true with null counts instead of a zero, signalSummary says "blocked by LinkedIn", and the row carries error and is not charged — run the company again. A refused country search only lowers the ad count, and searchesRefused says how many searches were refused.
How are job functions assigned? From keyword stems in the job title, with one precedence rule: a function word right before "engineer…" or "architect…" names the department the role sits in — pre-sales titles ("Sales Engineer", "Sales Engineering", "Solutions Engineer / Architect", "Pre-sales Engineer") count as Sales, "Marketing Engineer" as Marketing, "Support Engineer" as Customer and "Data / ML / AI Engineer" as Data & AI; any other "…Engineer" is Engineering. Otherwise the first matching keyword wins, in this order: Engineering, Data & AI, Sales, Marketing, Product, Design, People & HR, Finance, Customer, Operations — so "Product Designer" counts as Design and "Product Marketing Manager" as Marketing. Titles that match nothing count as Other: 39 of 207 roles for Datadog in our run of 2026-09-10, where Sales (78 roles, pre-sales titles included) came ahead of Engineering (44). Treat topDepartments as a rough split.
What does activeAdCount count? Distinct ads on the first result page of 9 Ad Library searches for the company id — all countries, then DE, FR, GB, NL, US, CA, AU and IN — capped at 60, so for big advertisers it is a lower bound. The Ad Library only covers the last 12 months (on 2026-09-10 its search page said "We only allow search for ads created on or after September 10, 2025"), so this measures recent advertising, not only ads running today. Formats and ad texts come from up to 12 of the ads found; the same copy can appear twice when it ran in two ads. LinkedIn's Ad Library often refuses proxy traffic with HTTP 403: on 2026-09-10 it refused 5 of the 9 searches in one Datadog run (the count, 28, was kept with searchesRefused: 5) and the worldwide search in two others, where the advertising block was reported as blocked and the row was not charged.
How is the ownership block decided? It is added whenever the lookup identifies an entity: a UK registration number on the company's own legal pages that exists in Companies House (ownershipConfidence 0.97), or a GLEIF record among the top 10 name matches that shares at least 60% of its words with the company name (0.9 when the names are equal once legal and generic words such as Inc, Ltd, GmbH or Group are removed, 0.82 otherwise). The confidence is a fixed label per method, not a probability — an equal name can still be a same-name subsidiary or a different company. ownershipSource starts with the method (domain-disclosure or gleif); the rest of that string is a fixed label, so it does not mean Companies House was consulted for that row. In our runs Datadog resolved to DATADOG, INC. (US, self/listed — no parent found, 0.9) and Stripe to nothing. Treat it as a lead for KYB and confirm it in the official register.
Which rows are charged? From 25 September 2026 only complete rows. A row with error is free: the page could not be loaded, the URL was malformed, the company id was missing while hiring or advertising was requested, or LinkedIn refused the job search or the worldwide Ad Library search. A module you switched off is simply not collected; that row is complete and charged. Until 25 September 2026 Apify still charges every row as a dataset item.
Can I export to CSV / Excel / JSON? Yes — directly from the Apify dataset.
🐛 Troubleshooting
- A company is missing from the results — the value was not a LinkedIn slug or company URL (for example it contains spaces); use the slug from
linkedin.com/company/<slug>/. - A row with
companyInputanderror: "malformed company URL (broken %-escape)"— fix the %-escape in that URL, or use the slug, and run it again. error: "company page unreachable"— LinkedIn answered 404 (wrong slug) or the page kept failing after 4 attempts; check the slug and run it again.blocked: trueinhiringoradvertising— LinkedIn refused those requests even from fresh proxy sessions (the run log shows each rotation and the last HTTP status); run the company again later. The row is not charged.noteandsignalsNotCollectedinstead of hiring/advertising — the company id was not found on the page, so the job search and the Ad Library were not queried; the row is not charged — run the company again.hiringMomentum: "unknown (capped)"— the 200-role cap was reached before the band could be decided; treat the counts as lower bounds.- No
ownershipblock — no entity was identified, or the GLEIF / Companies House lookup failed (those failures are silent).
⚖️ Is it legal to scrape this data?
The Actor reads pages that LinkedIn shows to logged-out visitors; it does not log in or use cookies. Check that your use fits LinkedIn's User Agreement and the law where you operate. Ad texts and the ownership block can contain personal data (for example a person with significant control); personal data is protected by the GDPR and similar laws, so only process it with a legitimate basis. LinkedIn is a trademark of LinkedIn Corporation; this Actor is not affiliated with, endorsed by or sponsored by LinkedIn.
🤝 Support & contact
- 🌐 Website: data.foxlabs.com.tr
- 📧 Email: info@foxlabs.com.tr
- 🐛 Issues: open a ticket in the Actor’s Issues tab
- 🧰 More clean B2B data actors: Fox Labs on Apify
Changelog
0.1.14 — 2026-09-10 — failed lookups become free (per-record billing) + README corrected
- From 25 September 2026 you pay only for complete company records. From that date the Actor charges a new
company-recordevent for each complete company row instead of the per-dataset-item event, at the same price ($0.07). Every row that carries anerrorfield — the company page could not be loaded, the URL was malformed, the company id was missing, or LinkedIn refused a requested signal — is pushed without a charge. - Timing: Apify applies pricing changes after a 14-day notice. The code for the switch ships in this version and detects the new pricing by itself; until 25 September 2026 billing is exactly as before.
- Fix — proxy sessions. The session-id cleanup had lost a backslash (
[^w.~]instead of[^\w.~]), so every request of a run shared one residential session (_). Each company now gets its own Apify Proxy session (c_<slug>_<hash>_<n>) for its page, job search, Ad Library searches and legal pages. When LinkedIn refuses a request (HTTP 403, 999, a 429 that survives one back-off, or an empty page), the session is retired and the request is retried from a fresh one — at most 3 sessions per company and 10 new sessions per run; every rotation is logged and the run's last log line counts them. A 403 from the company's own website is no longer retried. - Fix — job functions. Title keywords now match word stems, so "Product Designer" counts as Design, "Product Marketing Manager" as Marketing, "Recruiter" as People & HR and "Data Scientist" as Data & AI. A function word right before "engineer…" or "architect…" decides the department: pre-sales titles ("Sales Engineer", "Sales Engineering", "Solutions Engineer / Architect", "Pre-sales Engineer") count as Sales, "Marketing Engineer" as Marketing, "Support Engineer" as Customer and "Data / ML / AI Engineer" as Data & AI; any other "…Engineer" is Engineering. On the same 400 real titles,
Otherfell from 89 to 57 (Stripe) and from 71 to 47 (Datadog), all 21 of Stripe's marketing titles now count as Marketing (before: 1), and Datadog's Sales count rose from 32 to 65. - Fix — a refused request is no longer a zero. When LinkedIn refuses a job-search page, or the worldwide Ad Library search, after 4 attempts, that module's counts are
nullwithblocked: true,signalSummarysays "blocked by LinkedIn", the row carrieserrorand is not charged. Before, refused pages were skipped, which reported fewer roles, 0 roles or "not-hiring". A refused country search only lowers a count that is already a lower bound: the count is kept and the newadvertising.searchesRefusedsays how many searches failed. Every refused page is logged with its last HTTP status. - Fix — malformed URLs. A company URL with a broken %-escape used to stop the whole run ("URI malformed"). It now becomes one row with
companyInputanderror: "malformed company URL (broken %-escape)", is not charged, and the other companies still run. - Fix — rows without a company id. When the LinkedIn company id cannot be read from the page, hiring and advertising cannot be queried: the row now carries
error, is not charged, and itsnotesays what was not collected. With hiring and advertising both switched off, such a row is complete and still charged. - Output changes: new fields
companyInput,hiring.blocked,advertising.blockedandadvertising.searchesRefused;errornow also marks incomplete rows; counts of a blocked module arenullinstead of numbers;topDepartmentsvalues shift as described above. No field was renamed or removed. - README corrected. The 2026-09-07 README documented inputs this Actor does not have (
queries,maxResultsPerQuery,maxConcurrency,includeRaw) and used a placeholder example with an undefined value. It also claimed name or registry-ID search (the Actor takes LinkedIn slugs or company URLs), a "registry" source with "formation / status monitoring" (the source is public LinkedIn pages), aqueryfield on every row (there is none), "Primary industry (NACE)" (it is LinkedIn's industry label), status, legal form, formation date and registry contact fields (not in the output), troubleshooting built on name matching andmaxResultsPerQuery, and "failed lookups are never billed" (they were billed as dataset items; they are free from 25 September 2026). The README now lists the real inputs, fields, pricing and limits.
0.1 — 2026-09-07
- Enabled AI-agent payments (x402) + rebuilt the README to the full standard (What-is / when, AI-agents + x402 agentic payments + MCP, Overview, Features, Use cases, Integration, FAQ, Troubleshooting, Support & contact).
0.0
- Initial release: data from public LinkedIn company pages, looked up by LinkedIn company slug or URL. (Corrected 2026-09-10 — this line said "by name or registry ID".)