Facebook URL Parser
Introduction
Facebook links are a mess. One post can arrive as a permalink.php link with five tracking parameters, as a story.php link, as a /share/p/ token, as a page-tab URL, or as a short fb.watch link from the mobile app. The content is the same – only the URL shape changes. The Facebook URL Parser is a free online tool that recognizes more than twenty Facebook link formats, extracts the content ID, strips the tracking noise, and rebuilds the link as a clean canonical URL, an embed URL, or a share URL.
The parser is built for anyone who handles Facebook links regularly: social media managers who publish them, community managers who archive them, marketers who track campaigns, researchers who collect them at scale, and developers who store them in databases. Instead of cleaning each link by hand or trusting a shortener that hides what it does, you paste the link and see exactly what the parser found – the link type, the page name, the content ID, the owner, and the parameters it removed.
Two properties set this tool apart. It parses instantly, updating the result on every keystroke, and it makes zero network requests – the link never leaves your browser. There is no server, no API quota, and no log of what you paste.
Use Cases
Publishing and campaigns. Before you put a Facebook link in a newsletter, a blog post, or an ad comment, clean it with the canonical format. Click-tracking parameters such as fbclid and mibextid are session-specific, go stale quickly, and make analytics reports misleading. Publishing the canonical URL keeps your content links stable and your metrics honest.
Archiving and deduplication. When you store Facebook links in a spreadsheet, a CMS, or a research dataset, the same post can appear with dozens of different URL shapes. The parser normalizes them all to one canonical form, so story.php?story_fbid=…, /share/p/…, and /username/posts/… pointing at the same post collapse into a single stable identifier you can dedupe against.
Customer support. Support tickets often contain links copied from the Facebook app, which arrive as fb.watch short links or permalinks with long parameter trails. Pasting the link into the parser gives you the clean canonical URL and the content ID to look up, plus the owner's page link to identify who posted it.
Website embedding. If you publish Facebook posts on your own site, the embed format produces the official Facebook plugin URL you drop into an iframe. No third-party embed services, no widget scripts, no scraping.
Data hygiene. For developers and researchers, the parser doubles as a specification reference – the removed-parameters list tells you exactly which tracking keys Facebook appends today, and the supported-formats table documents every route the tool recognizes.
Anatomy of a Facebook Link
A Facebook link has three parts worth understanding: the host, the path, and the query string.
Take a real-world photo link:
https://www.facebook.com/photo/?fbid=1476858904444046&set=pcb.1476858951110708&__tn__=-R&mibextid=rSxxaY
The host www.facebook.com (or m.facebook.com, fb.watch, fb.me) tells the parser which family the link belongs to. The path /photo/ names the route – here the modern photo page. The query string mixes two kinds of parameters, which the parser treats very differently:
| Parameter | Kind | What the parser does |
|---|---|---|
fbid=1476858904444046 |
Identity | Keeps it – this is the photo's content ID |
set=pcb.1476858951110708 |
Navigation | Removes it – album navigation context, not part of the photo's identity |
__tn__=-R |
Internal token | Removes it – Facebook's internal click-tracking token |
mibextid=rSxxaY |
Tracking | Removes it – third-party app attribution |
Identity parameters tell you which post, video, reel, photo, page or group the link points to. Everything else is context – how you arrived, which app you came from, which part of the page was highlighted. The parser keeps the identity and drops the context, then reports the dropped keys so the cleanup is auditable.
How It Works
Parsing runs entirely in your browser, with no network requests and no server round-trip. On every keystroke the parser runs the link through three stages:
- Host matching. The link is matched against the three Facebook domains:
facebook.com(with any subdomain such asm.ormbasic.),fb.watch, andfb.me. - Route matching. The path is split into segments and matched against the known route table –
watch,reel,photo,story.php,permalink.php,share/p/,groups/{id}/posts/{id},profile.php, page names, and page-tab paths. - Query analysis. Identity parameters (
v,fbid,story_fbid,id) are extracted and validated, while tracking parameters are detected by three rules and collected into the removed list.
Every extracted value is validated against strict patterns before it is accepted: numeric IDs must be 5–20 digits, pfbid tokens must start with pfbid, usernames must be 2–50 characters. Anything that fails validation makes the parser report an invalid link rather than guessing.
Because there is no network access, the parser never needs a loading state, never hits a rate limit, and produces results the instant you paste.
Supported Link Formats
The parser recognizes more than twenty formats across seven result kinds.
| Format | Example | Result kind |
|---|---|---|
| Post with page name | facebook.com/nike/posts/1234567890123456 |
post |
| Post, numeric or pfbid ID | facebook.com/nike/posts/pfbid0AbCdEf |
post |
| Story permalink | facebook.com/story.php?story_fbid=111222333444&id=555666777888 |
post |
| Legacy permalink | facebook.com/permalink.php?story_fbid=…&id=… |
post |
| Share token | facebook.com/share/p/1AbCdEf2Gh3Ij/ |
post |
| Video watch page | facebook.com/watch/?v=10153231379946729 |
video |
| Video watch path | facebook.com/watch/10153231379946729 |
video |
| Legacy video page | facebook.com/video.php?v=637842556329505 |
video |
| Video with page name | facebook.com/nike/videos/10153231379946729 |
video |
| Reel | facebook.com/reel/Reel1AbCdEfGh |
reel |
| Reel with page name | facebook.com/nike/reels/pfbid0Reel12345 |
reel |
| Modern photo page | facebook.com/photo/?fbid=1476858904444046 |
photo |
| Legacy photo page | facebook.com/photo.php?fbid=9876543210123456 |
photo |
| Photo with page name | facebook.com/nike/photos/1234567890123456 |
photo |
| Plain page | facebook.com/nike |
page |
| Page tab | facebook.com/nike/reviews |
page |
| Numeric profile page | facebook.com/profile.php?id=100001234567890 |
page |
| Group post | facebook.com/groups/999888777666/posts/111222333444 |
group-post |
| Short link | fb.watch/AbC12dEfXy |
short |
| Redirect domain | fb.me/nike |
page |
| Mobile subdomains | m.facebook.com/meta, mbasic.facebook.com/nike |
same as desktop |
Page tabs are accepted generically: any lowercase word as the second path segment – about, reels, photos, followers, mentions, music, jobs, fundraisers, support, and any future tab – resolves to the page itself, because a tab is a view of the page, not a different resource.
The parser also rejects routes that are not shareable Facebook content. Reserved platform routes such as login, help, settings, search, marketplace, events, hashtag and messages return an invalid-link message, as do malformed shapes such as a numeric second segment (nike/1234567890123456) or unknown three-segment paths. The complete reserved list is documented in the Technical Specs chapter.
Understanding Post IDs
Facebook uses three distinct ID formats, and the parser accepts all of them wherever they appear.
Numeric IDs are the legacy format: 5–20 digits such as 10153231379946729. They still appear on video watch pages (watch/?v=), photo pages (fbid=), and the id parameter of story links. They are stable and human-readable.
pfbid IDs are the modern format, introduced gradually from 2022. They start with the letters pfbid followed by a long mix of letters, digits, underscores and dashes – real-world examples run to about 70 characters. Unlike numeric IDs, pfbid tokens are time-rotating and opaque: they are not a sequence number and cannot be decoded locally. Meta has published the concept but no length specification, so the parser accepts any pfbid token up to 200 characters after the prefix rather than risk rejecting a legitimate link.
Reel tokens and share codes are opaque alphanumeric tokens 5–40 characters long, such as Reel1AbCdEfGh. Reel tokens consistently start with the prefix Reel, but the parser does not depend on it – any token of the right shape is accepted.
What can you do with the extracted ID? It is the stable key of the content: use it to deduplicate links in a database, to search for the post, to reference it in a CMS, or to look it up through an API if you have access to one. The parser surfaces the ID on its own row precisely so you can use it without parsing it out of a URL by hand.
Tracking Parameters We Remove
Facebook appends a long list of parameters to links, and the parser removes them with three detection rules:
- Campaign parameters – any key starting with
utm_(Google Analytics convention):utm_source,utm_medium,utm_campaign,utm_term,utm_content. - Internal tokens – any key starting with a double underscore, such as
__tn__and__cft__[0]. These are Facebook's internal click-tracking markers, often URL-encoded and bracketed. - The exact list – 37 known tracking, session and navigation parameters.
The most common exact-list parameters:
| Parameter | What it records |
|---|---|
fbclid |
Which ad or post the click came from |
mibextid |
Which third-party app shared the link |
rdid, rd |
Mobile device identifiers |
ref, fref, refid, ref_src, ref_url |
The page where the link was clicked |
eav, ftid, paipv, jazoest |
Session and anti-abuse tokens |
sk, lst, rsv, tn |
Page-state and session values |
eid, notif_t, notif_id |
Notification context |
comment_id, reply_comment_id |
Comment navigation context |
set, type, theater, offset, locale |
Album navigation, view mode, position and language |
action_history, acontext, app, video_source, ls_ref, pageid, ftentidentifier, padding |
Click context and source metadata |
Identity parameters are never removed: v (video ID), fbid (photo ID), story_fbid (post ID) and id (owner ID) are the content itself. For a story.php link the parser therefore keeps both story_fbid and id in the canonical output – deleting them would break the link.
Why is removal always safe? Tracking parameters describe how you arrived, not what the link points to. fbclid, mibextid and utm_* only change attribution reporting; the rendered content is identical without them. The removed-parameters row shows you exactly what was taken off, so the cleanup is verifiable at a glance.
Output Format Guide
Every parsed link can be rendered in three formats.
| Format | Output | When to use it |
|---|---|---|
| Canonical URL | The clean, stable link. Story links keep story_fbid and id; username routes keep their path |
Publishing, archiving, deduplication, anything that stores a link long-term |
| Embed URL | A Facebook plugins URL (plugins/post.php, plugins/video.php or plugins/page.php) |
Pasting into an <iframe> to render the content on your own site |
| Share URL | The official share dialog (sharer/sharer.php?u=…) |
Buttons, links that open Facebook's share dialog with the content prefilled |
The embed format picks the right plugin for the content kind: posts, photos, reels and group posts use plugins/post.php (with show_text=true so the post text renders), videos use plugins/video.php, and pages use plugins/page.php. The share format wraps the canonical URL, so a shared link always points at the clean version.
Short links (fb.watch) have a special rule: because the target cannot be resolved locally, the canonical form is the short link itself, and the embed and share formats are unavailable. The output format options are hidden automatically when a short link is parsed.
Usage
- Paste the link. Click the input field and paste the Facebook URL (Ctrl+V or Cmd+V). The parser reads it as you type – there is no button to press.
- Read the result panel. Five rows summarize the parse:
| Row | What it shows |
|---|---|
| Type | The result kind: post, video, reel, photo, page, group-post or short |
| Page name | The page or profile name from the URL, as a clickable link |
| Content ID | The extracted ID – numeric, pfbid, reel token or share code |
| Owner | The owner's numeric ID as a link – shown only for links that carry no page name, such as story.php and group posts. Page-name links and owner IDs are mutually exclusive by nature: a URL either names the owner or identifies it by number |
| Removed params | The tracking parameters that were stripped, comma-separated |
- Pick the output format. Canonical URL is the default. Switch to Embed URL or Share URL when you need one of those forms.
- Copy the result. The output field updates instantly; press Copy to put it on the clipboard.
Tutorial
Follow along with a complete example, from a messy app link to a published clean URL.
Step 1 – Paste a permalink. Copy this link, as it might come from a shared post:
https://www.facebook.com/permalink.php?story_fbid=pfbid0Vh6GpZMMpB4G4Zrhw7GPoRDnPEQwTUtK8zvYue2qScZatWKvE9REsyqxw7TxjpnXl&id=100063598515444&__tn__=-R&mibextid=rSxxaY
Paste it into the input. The result panel fills in immediately: type post, content ID pfbid0Vh6…TxjpnXl, owner page 100063598515444 as a clickable link, and removed parameters __tn__, mibextid.
Step 2 – Copy the canonical URL. The output shows the clean story link:
https://www.facebook.com/story.php?story_fbid=pfbid0Vh6…&id=100063598515444
Both identity parameters are preserved – removing either would break the link.
Step 3 – Embed the post. Switch to Embed URL. The output becomes https://www.facebook.com/plugins/post.php?href=…&show_text=true. Wrap it in an iframe on your site:
<iframe src="https://www.facebook.com/plugins/post.php?href=…&show_text=true"
width="500" height="600" style="border:none;overflow:hidden" scrolling="no"
frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write;
encrypted-media; picture-in-picture; web-share"></iframe>
Step 4 – Clean a photo link. Paste https://www.facebook.com/photo/?fbid=1476858904444046&set=pcb.1476858951110708&locale=en_GB. The type reads photo, the ID is 1476858904444046, and the removed list shows set and locale. The canonical output is the short modern form https://www.facebook.com/photo/?fbid=1476858904444046.
Step 5 – Resolve a page tab. Paste https://www.facebook.com/FubonGuardiansBaseballTeam/reviews. The type reads page, the page name links to the page, and the canonical output collapses the tab away to https://www.facebook.com/FubonGuardiansBaseballTeam – the tab is a view, not a separate resource.
Step 6 – Handle a short link. Paste https://fb.watch/AbC12dEfXy. The type reads short, the output keeps the short link, and the format options disappear – the parser never guesses where a short link points.
Pro Tips
- Deduplicate archives by content ID. When you batch-clean a spreadsheet, the Content ID row is your stable key: the same post always yields the same ID, no matter which URL shape it arrived in. Sort and dedupe on that column, not on the URL.
- Publish canonical, measure canonical. If your team shares Facebook links through a link-in-bio service or a shortener, publishing the canonical form underneath avoids a double layer of redirects and keeps UTM reports readable.
- Use embed URLs with the official iframe. Facebook's plugin URLs need no extra JavaScript and no third-party embed service – just the iframe shown in the tutorial. The plugin handles responsive width and renders the official post styling including share buttons.
- Verify the owner before trusting a link. The Owner row links
story.phpand group-post links to their numeric owner page or group. One click tells you which account actually published the content – useful when you receive a suspicious forwarded link. - Check the removed list as a monitoring signal. Facebook occasionally changes its tracking vocabulary. If the removed list starts showing a parameter you have not seen before, it is worth a look – the parser surfaces exactly what the app is appending today.
- Page tabs collapse automatically. Do not hand-edit
facebook.com/nike/reviewstofacebook.com/nikein a spreadsheet – the parser does it for you and keeps the page-name row intact.
Alternatives
| Option | Strengths | Weaknesses |
|---|---|---|
| This parser | Zero requests, instant, pfbid-aware, 20+ formats, embed and share builders, auditable removal list | No API access to metadata such as post titles |
| Manual editing in the address bar | No tools needed | Error-prone with pfbid links, easy to delete identity parameters by mistake, no embed or share formats |
| Generic URL cleaners | Simple to use | Built for shorteners and general links, not Facebook routes; usually blind to story_fbid/id identity pairs and page tabs |
| Meta Content Library API | Official metadata, search and filtering | Requires an approved developer account, quota-based, network round-trip, cannot be used from a browser without keys |
| Facebook's own share button | Official, zero effort | Only shares a link, does not clean, archive or embed it |
For one-off cleaning the canonical format of this parser is the fastest path; for batch research with metadata, a Meta API may be appropriate – but it is a developer tool, not a link cleaner.
Against the Official APIs
Meta offers official embed APIs – the oEmbed endpoints at graph.facebook.com/v25.0/oembed_post, oembed_video and oembed_page – which have been usable without an access token since June 2026, with a quota of 1,000 requests per hour per endpoint. They are the right foundation for the embed generators this site builds around Facebook, and they can resolve metadata that a local parser cannot.
This parser deliberately does not call them. A local parser covers what the API cannot:
| Situation | Local parser | oEmbed API |
|---|---|---|
| Group posts and page tabs | Parsed locally | Not exposed as embeddable content |
Share tokens (/share/p/…) |
Parsed locally | No endpoint |
| Link cleaning for any archive | Instant, unlimited, offline | Costs quota per request |
| Privacy | Link never leaves the browser | Sent to Meta servers |
The two approaches are complementary: the parser cleans and identifies every link you will ever paste, and the official APIs enrich the ones you actually want to embed or analyze.
What It Doesn't Do
It cannot tell pages from personal profiles. facebook.com/nike looks identical whether nike is a page or a profile. Only an API call reveals the account type, so both are reported as page.
It cannot resolve fb.watch short links. Short links are opaque codes; resolving the target requires following a redirect over the network. The parser keeps the short link as its canonical form instead of guessing.
It rejects non-content routes. Platform chrome such as login, help, settings, search, marketplace, events and hashtag is not shareable content and is rejected as invalid. Albums (/username/albums, /username/album/…) and video share tokens (/share/v/…) are likewise outside the supported set.
It does not fetch metadata. There is no request to Facebook, so the parser never shows post text, titles, view counts, or upload dates. It answers what is this link and what is its clean form – nothing more.
It does not modify anything. The tool never shortens, redirects, stores, or re-serves links. The output is a URL you take with you.
Troubleshooting
| Problem | Cause | Solution |
|---|---|---|
| "Enter a valid Facebook URL" appears | The link uses a reserved route such as login or search, a malformed shape, or a non-Facebook domain |
Check the link was copied from Facebook itself. Reserved routes are rejected by design because they are not content |
| A page-tab link shows as a page | Tabs such as reviews or followers are views of the page, not separate resources |
This is correct behavior – the canonical page root is the right stable link |
| A fb.watch link has no embed or share options | Short links cannot be resolved locally, so only the canonical form exists | Use the short link as-is, or open it once and copy the long URL from the address bar if you need embed or share forms |
| The Owner row is empty for a link with a page name | Page-name links carry the owner in the URL itself; the numeric owner ID only appears in nameless formats such as story.php |
The two rows are complementary by design – the Page name row is the owner link for these URLs |
The output keeps story_fbid and id parameters |
These are identity parameters, not tracking – deleting them breaks the link | Leave them. Only tracking keys appear in the removed list |
| A pfbid link is rejected as invalid | The token does not start with pfbid or exceeds the accepted length |
Check the link was fully copied, including the trailing characters |
| The hash fragment of a link disappears | Fragments such as #_=_ are browser-side markers, not part of the URL's identity |
Expected behavior – the canonical URL never includes fragments |
Privacy & Data Handling
This tool makes zero network requests. The URL you paste is processed entirely in your browser: no server receives it, no analytics script sees it, no third-party log records it. There is no account, no storage, and no way for the tool to know what you pasted after you close the page.
That makes the parser different from API-backed tools in one concrete way: the link, its owner ID, and its content ID never transit any server you do not control. You can clean pre-publication links, internal campaign links, or links you were forwarded privately without them appearing in any third-party log.
The parser also does not embed third-party scripts. The embed URLs it generates point at Facebook's own plugin endpoints, and Facebook only sees those URLs if you choose to use them on your site – the parser itself never loads them.
Technical Specs
| Property | Value |
|---|---|
| Processing | 100% client-side, zero network requests |
| Update model | Real-time on every keystroke |
| Accepted hosts | facebook.com (any subdomain), fb.watch, fb.me |
| Result kinds | post, video, reel, photo, page, group-post, short |
| Numeric ID pattern | 5–20 digits (\d{5,20}) |
| pfbid pattern | pfbid + 1–200 alphanumeric, underscore or dash characters |
| Token pattern (reels, share codes) | 5–40 alphanumeric, underscore or dash characters |
| Username pattern | 2–50 letters, digits or dots |
| Page-tab rule | Any lowercase word slug in the second path segment, non-numeric |
| Tracking-parameter rules | utm_* prefix, __ prefix, and an exact list of 37 keys |
| Identity parameters kept | v, fbid, story_fbid, id |
| Output formats | Canonical URL, Embed URL (plugins post/video/page), Share URL (sharer dialog) |
| Dependencies | None – plain JavaScript, no frameworks |
| Browser support | Modern evergreen browsers (Chrome, Edge, Firefox, Safari) with URLSearchParams |
The reserved-route list is: login, signup, checkpoint, help, settings, privacy, about, careers, policies, developers, plugins, sharer, sharer.php, dialog, l.php, tr, messages, marketplace, events, pages, search, directory, friends, notes, hashtag, p, s, u, campaigns, fundraisers, live, profile.php, watch, reel, photo, story, permalink, share, groups, reels, posts, videos, photos.
Features
- Parse 20+ Facebook link formats, including posts, videos, reels, photos, pages, group posts and short links
- Remove tracking parameters such as fbclid, mibextid and utm_* automatically, and show exactly what was stripped
- Extract content IDs in both legacy numeric and modern pfbid formats
- Build canonical URLs, Facebook plugin embed URLs and share dialog URLs in one click
- Recognize page tabs, story and permalink links, and fb.watch short links
- Parse instantly in your browser with zero requests, so your links never leave your device