Tagging a Company Page From an AI Chat: The Numeric ID Problem
This is one of the most common surprises when people start posting to LinkedIn through an AI assistant. You ask for a post that tags a company, the assistant writes a lovely paragraph with “@Acme” in it, the post publishes, and the tag sits there as flat grey text. Nobody gets notified. Nothing is clickable. The post looks slightly amateur.
It is not a bug in the assistant, and it is not a bug in the tool. It is how LinkedIn’s posting API (application programming interface — the official doorway apps use to talk to LinkedIn) actually works, and it is worth understanding once so you never have to wonder again.
Why does typing @Acme in my post not create a tag?
Because on LinkedIn the “@” symbol is not the tag. It is just a character.
When you type “@” in LinkedIn’s own web box, a little dropdown appears and you pick a company or a person from the list. That picking step is the part that matters. Behind the scenes, choosing from that list attaches a hidden instruction to your post that says, in effect: the characters from position 42 to position 46 are not words, they are a link to this specific page.
Send the post through the API instead and there is no dropdown, so there is nothing to pick from. The API takes your text exactly as given. If the hidden instruction is not sent alongside it, LinkedIn has been handed the letters “@Acme” and nothing else — and it renders them as the letters “@Acme”.
What is a LinkedIn mention actually made of?
A mention is what the API calls an annotation — a small piece of structured data sent next to your text rather than inside it. Each annotation has two halves:
- Where the tag sits. A start position and a length, counting characters into your post text. This is how LinkedIn knows which words to turn blue.
- What it points at. A URN (uniform resource name — LinkedIn’s internal ID format for a thing on the platform). For a company page that looks like
urn:li:organization:1234567. For a person it looks likeurn:li:person:....
So the tag needs a number. Not a name, not a web address, not the handle you see in the search bar — the numeric organisation ID that sits inside that URN. Without it there is no annotation, and without an annotation there is no clickable tag.
That single requirement is where the whole problem starts.
Why can an app not just look up the company by name?
You would expect a “give me the ID for Acme” endpoint to exist. It does. It is called the Organization Lookup API, and it is not available to self-serve apps.
Here is the split. LinkedIn hands out two of its posting-related products to anyone who signs up, with no fee and no partnership: “Sign In with LinkedIn” for identity, and “Share on LinkedIn” for publishing, which grants the permission named w_member_social (a scope — a named, limited permission you approve on LinkedIn’s own screen). Company lookup lives on the other side of the fence, inside the Community Management API, which is gated behind partner approval: a registered legal company, a business email address, and an app review.
So a self-serve LinkedIn tool sits in an odd position. It is fully allowed to publish a post containing an organisation tag. It is simply not allowed to ask LinkedIn what the organisation’s number is.
Why not just read the number off the page? Because that is scraping, and scraping LinkedIn breaches the same API Terms of Use that grant a tool its posting permission in the first place. A tool that scrapes to find company IDs is risking the access that lets it post at all — and risking your account along with it. Kalovio does not scrape LinkedIn from its servers, ever. It uses Wikidata, an openly licensed public database, only to work out which official page a name refers to and what the page’s exact name is. Wikidata does not hold the number, so the number still has to come from a person the first time.
How do I find a company’s numeric LinkedIn ID?
You only ever need to do this once per company, and it takes about fifteen seconds in a browser.
- Open the company’s LinkedIn page.
- Click See all employees (the link under the follower count).
- Look at your browser’s address bar. You are now on a people-search page, and the address contains
f_C=followed by a number. - That number is the organisation ID. Copy it.
If you administer the page yourself, the number also appears in the address bar of your admin view. Either route gives the same value.
Paste that number into your chat once — “tag Acme, their ID is 1234567” — and the tag will render properly from then on.
Why does the tag text have to match the page name exactly?
This is the second trap, and it catches people who did everything else right.
LinkedIn cross-checks the words you highlighted against the real name of the page you pointed at. If they do not match, LinkedIn quietly declines to render a link and leaves your text as ordinary characters. The post still publishes. It just publishes without the tag, and there is no error message telling you why.
The rules that trip people up:
- No leading @. The “@” is not part of the page’s name, so it must not be part of the highlighted text.
- Case matters. A page called “Acme Cloud” will not match “acme cloud”.
- The full name, not the short one. If the page is called “Acme Cloud Technologies”, tagging “Acme” will not work, however obvious it looks to a human.
- Punctuation counts. A comma, a full stop or an ampersand in the official name has to be there in your text too.
What actually goes wrong, and what fixes it
| What you see | The cause | The fix |
|---|---|---|
| Tag is grey text, nobody notified | No annotation was sent — only the characters | Ask for a real mention, not just @ in the text |
| Tool asks you for a number | The company is not in the directory yet | Grab it once from f_C= and paste it in |
| Number supplied, still grey | Tag text does not match the page name exactly | Use the page’s exact full name, no @, same case |
| Wrong company tagged | Two pages share a similar name | Supply the page URL or the number directly |
| Tagging a person does nothing | People need a person URN, not a company one | Use a collab code (see below) |
How does Kalovio make this a one-time problem?
Kalovio is a hosted LinkedIn MCP server — MCP being the Model Context Protocol, the open standard that lets an AI assistant such as Claude or ChatGPT use outside tools. Its answer to the ID problem is a shared company directory.
It works like a memory that everyone contributes to:
- Well-known companies are already in it. A small set ships with the product, so common tags work with no number at all.
- Any company tagged once is remembered for everyone. The first person to supply a number teaches the directory. From then on, every Kalovio user can tag that company by typing its name, and nobody sees a number again.
- The name is remembered too. Because the directory stores the page’s exact display name alongside the ID, the exact-match rule above stops being your problem.
- A miss is a clear ask, not a silent failure. If a company genuinely is not known yet, the tool replies with the page it believes you mean, the fifteen-second
f_C=instruction, and a promise to remember. It never invents a number and never publishes a broken tag.
Because publishing in Kalovio is two-step — a preview first, then your explicit confirmation — you also see how the mention will be applied before anything reaches LinkedIn. If the wrong company got matched, you catch it in the preview rather than in your feed.
How do I tag a person from an AI chat?
People are a separate case, and a stricter one. Tagging a member needs that person’s URN, and LinkedIn does not let a self-serve app go looking through member profiles — which is the right outcome, since “let any app find any member by name” is exactly the pattern the scraping tools abuse.
Kalovio handles it with collab codes, which turn the problem into consent. Any Kalovio user can run get_collab_code and receive a short personal code. They share it with you however they like — a message, an email, a shared document. You hand that code to your assistant along with their name, and the mention resolves into a real, clickable person tag.
The important part is who is in control. Nobody can be tagged unless they have chosen to hand out their own code. There is no directory of people to search, no way to guess a code, and no way for a tool to tag someone who never opted in.
What still does not work
- There is no automatic name lookup for unknown companies. Until a page is in the directory, someone has to fetch the number once. That is a LinkedIn access limit, not a design choice.
- You cannot tag a person who is not a Kalovio user. No collab code, no member mention.
- Posting as a company page is a different permission entirely. Tagging a page and publishing from a page are unrelated; the second needs the partner-gated Community Management API.
- You will not see who engaged with the tag. Engagement analytics sit behind that same gate. Kalovio counts clicks on links it shortens, which is a different measurement.
None of that changes the practical outcome, though. Get the number once, or tag a company somebody has already tagged, and the mention behaves exactly as it does when you type it by hand in LinkedIn’s own box — blue, clickable, and it notifies the page.
Questions people ask
Why is my @mention showing as plain text on LinkedIn?
Because the “@” character is not what creates a tag. A real mention is a separate instruction attached to the post that says which characters to link and which page they point to, identified by a numeric ID. If that instruction was not sent, LinkedIn publishes your text literally — including the @ — as ordinary grey words.
How do I find a LinkedIn company page ID number?
Open the company’s LinkedIn page, click See all employees, then read your browser’s address bar. The address will contain f_C= followed by a number, and that number is the organisation ID. Page administrators can also read it from the address bar of their admin view.
Why can't an AI tool look up a LinkedIn company by name?
The lookup endpoint exists but sits inside LinkedIn’s Community Management API, which is gated behind partner approval — a registered legal company, a business email and an app review. Tools using the free self-serve products can publish a tag but cannot ask LinkedIn for the number. Reading it off the site instead would be scraping, which breaches the API Terms of Use that grant posting access in the first place.
Do I have to enter the company number every time I tag them?
No. Kalovio keeps a shared company directory: well-known companies are already in it, and any company tagged once by anyone resolves by name for everyone afterwards. In practice most people never touch a number — and when a company genuinely is not known yet, the tool tells you exactly where to find it and remembers it from then on.
Why did my tag stay grey even though I supplied the right ID?
Almost always because the highlighted text does not match the page’s name exactly. LinkedIn checks the words against the real page name and silently declines to link them if they differ. Drop the leading @, match the capitalisation, use the full name rather than a shortened one, and keep any punctuation the official name contains.
Can I tag a person in a post written by Claude or ChatGPT?
Only if they have given you their collab code. Person tags need that member’s own ID, and LinkedIn does not let self-serve apps search member profiles. In Kalovio, anyone can run get_collab_code to get a short personal code and share it; you pass that code and their name to the assistant, and the mention becomes clickable. Nobody can be tagged without handing out their code first.
Sources
Try Kalovio free
Run your LinkedIn from a chat with Claude or ChatGPT. Add this as a custom connector — free while in beta, and you approve every post before it goes live.
https://kalovio.com/mcpHow to connect