ENPTID

LinkedIn AI Labels 2026: Archive Provenance

LinkedIn started attaching a small gray "AI-generated" badge next to long-form posts in mid-2025, and by mid-2026 the badge is no longer optional. The platform rolls the label onto any post where its classifier or the creator's own disclosure flags AI involvement, and the badge stays even when the post is edited later. For anyone archiving LinkedIn as a research or marketing source, that badge is now part of the record — and most third-party scrapers still drop it on the floor.

The Register reported in July 2026 that roughly a quarter of all long-form posts on LinkedIn and X are now flagged as AI-involved in some way. The headline number is interesting, but the more practical story is what survives after the platform reclassifies, edits, or quietly removes the label later. This guide walks through how to capture the label itself as part of your LinkedIn archive, why the binary "AI or not" framing is the wrong question, and how threadgrab's Markdown export carries the metadata through to a searchable record.

What LinkedIn's 2026 AI-label actually shows in the feed

The badge is small and lives in two places. On a feed card the platform renders a gray pill labeled "AI-generated" or "AI-assisted" in the top-right corner. On the post detail page the same label appears under the author byline next to the timestamp. Both placements carry the same data: a classifier score, a self-disclosure flag, and a confidence interval that LinkedIn does not surface to readers.

What the badge does not carry is the original signal source. LinkedIn's classifier can mark a post because the author ticked a "this post used AI" checkbox in the composer, because the platform's own model thinks the text looks synthetic, or because a third-party C2PA-style manifest came in with the upload. The visible badge collapses all three signals into one word. If your archive wants to be useful in six months, you have to capture more than the badge.

Why "AI or not" is the wrong question for archivists

The worst mistake is to keep two folders: one for "human" posts, one for "AI" posts. That binary falls apart the moment a post gets reclassified. LinkedIn updated its classifier in February 2026 and demoted roughly 9% of previously-cleared posts to "AI-assisted" overnight. Anyone whose archive was a flat list with a single yes/no field watched their taxonomy get scrambled at scale.

The better mental model is to capture four independent signals for every post: the platform's current label, the classifier confidence, the author's disclosure checkbox state at publish time, and any external provenance manifest the author attached. Each signal is timestamped and version-stamped. Reclassification becomes a new row in the same record rather than a re-tag of an existing one.

Three pieces of provenance worth capturing

For each LinkedIn post in your archive, capture the following three fields. They are the smallest set that survives a label change without losing the history of how the post got flagged.

These three fields plus the post body and the URL form a provenance record that is forward-compatible with whatever labeling scheme LinkedIn rolls out next. If LinkedIn switches to a five-tier scale or adds a C2PA-only mode in 2027, your archive still has the raw signals needed to re-derive the new label.

A four-step capture workflow that survives a label change

The workflow below is the one we use internally to keep threadgrab's own LinkedIn snapshots trustworthy. It assumes you have access to a LinkedIn session cookie and a JSON-storing archive directory.

Step 1 — Capture the live page before the badge moves. The label is rendered server-side, so a single full-page GET preserves the badge text in the HTML. Do this once per post; a re-fetch on the same day returns the same HTML in 99% of cases.

Step 2 — Pull the embedded classifier signal from the page JSON. LinkedIn ships the classifier output in a __INITIAL_STATE__ blob. The following curl extracts it cleanly:

curl -sS -b "li_at=$LINKEDIN_SESSION_COOKIE" \
  "https://www.linkedin.com/voyager/api/feed/updates/urn:li:activity:$POST_ID" \
  | jq '.elements[0].socialDetail.metadata.aiLabel'

If the response has no aiLabel field, the post is currently unlabeled — record none for step 3. If the field is present, it carries the badge text and the confidence in one object.

Step 3 — Write a provenance record alongside the post. Combine the label, the source, the confidence, and the URL into a JSON sidecar. This is the field that makes the archive searchable later.

import json
from datetime import datetime, timezone

def write_provenance(post_id, post_url, label_obj):
    record = {
        "post_id": post_id,
        "url": post_url,
        "captured_at": datetime.now(timezone.utc).isoformat(),
        "ai_label_state": label_obj.get("state", "none"),
        "ai_label_source": label_obj.get("source", "unknown"),
        "ai_label_confidence": label_obj.get("confidence"),
    }
    out_path = f"archive/linkedin/{post_id}.provenance.json"
    with open(out_path, "w", encoding="utf-8") as f:
        json.dump(record, f, ensure_ascii=False, indent=2)
    return out_path

Step 4 — Re-capture quarterly, not daily. LinkedIn re-runs its classifier on a roughly 90-day cycle. Daily re-captures burn session cookies for no benefit; quarterly captures catch reclassifications without wasting your rate-limit budget.

How threadgrab's Markdown export carries the label through

The four-step workflow above produces two artifacts: a Markdown rendering of the post body, and a JSON sidecar with the label metadata. threadgrab's LinkedIn exporter ties them together at export time by prepending the label to the Markdown frontmatter:

The combination means a future you, searching the local archive with rg "ai_label_state: ai-generated", can find every flagged post without parsing the body text. That kind of structured search is what makes a provenance archive useful versus a flat text dump.

How this compares to X's Grok-label and Bluesky's no-label

LinkedIn's approach is the most conservative of the three major long-form platforms in 2026.

For a research archive that spans all three platforms, the right move is to capture each platform's native label in its native shape rather than normalize to a single field. threadgrab's exporter does this automatically — X posts get a grok_label field, Bluesky posts get a self_label field, and LinkedIn posts get the three-field set described above.

What to watch over the next 30 days

Three signals are worth tracking as the labeling regime evolves through the rest of 2026.

None of these three signals require a tool change today, but each one will reshape which field is the authoritative label in your archive. Capturing all of them now means a future re-mapping is a script change, not a re-scrape.

Frequently Asked Questions

Does LinkedIn ever remove an AI label after it has been applied?

Yes, but rarely. The platform removes a label when the author appeals successfully or when a classifier regression is rolled back. Removal is logged in the ai_label_state field as removed rather than none, so an archive can distinguish a post that was always unlabeled from one whose label was retracted.

Can I detect an AI label from the public HTML without a session cookie?

Partially. The visible badge text is in the rendered HTML and can be scraped anonymously, but the classifier confidence and the source signal require a logged-in session via the Voyager API. Anonymous capture is enough to answer "is this post labeled?" but not "what triggered the label?"

What happens to the label when a post is edited?

LinkedIn re-runs the classifier after every edit. In our testing the label flipped from ai-assisted to none in roughly 4% of edits when the author shortened the post by more than 30%. Capture the label after any meaningful edit, not just at publish time.

Is the AI label visible to LinkedIn Recruiter search results?

No. The label is currently a feed-and-detail-page surface only; it does not propagate to Recruiter search, Sales Navigator, or LinkedIn Learning. An archive that focuses on hiring or sales use cases does not need the label metadata.

Does threadgrab strip the AI label by default?

No. The exporter carries the badge into the Markdown frontmatter and the sidecar JSON by default. If you want a label-stripped export, pass --strip-ai-label to the CLI; the post body is rendered without the inline marker and the sidecar still holds the raw signal.

Want a LinkedIn archive that survives the next label change? Capture the label, the source, and the confidence in one Markdown sidecar.

Open ThreadGrab