socid-extractor is a free, open source data extraction & web scraping project written in Python and released under MIT. It has 1,089 GitHub stars, 120 forks and 12 open issues, and was last pushed 5 days ago. On this registry it ranks #40 of 45 tracked projects in Data Extraction & Web Scraping, with 5 head-to-head comparisons available. It gained 3 stars over the last 3 tracked days.

What is socid-extractor?

socid-extractor is a Python library and command-line tool that parses public profile pages and API responses into a flat, machine-readable dictionary of account fields, built for OSINT investigators, researchers, and developers who need structured account records instead of raw HTML.

What it is

socid-extractor is the extraction engine that powers Maigret and several other OSINT tools. It takes the text of an HTML page or an API response and returns a uniform dictionary of account fields: username, fullname, bio, avatar, location, created_at, is_verified, follower counts, external links, and the stable internal identifiers that pin an account across renames and redesigns. It lives in the Python OSINT and SOCMINT ecosystem, installs from PyPI, and is licensed under MIT.

The concrete problem it solves is per-platform glue code. Any tool that wants account data from Instagram, GitHub, VK, Reddit, Substack, Bluesky, or TikTok normally needs a separate scraper for each service, each with its own selectors and its own field names. socid-extractor replaces that collection of one-off parsers with a single extract() call and a shared field ontology documented in FIELDS.md, so downstream pipelines do not maintain mappings for every platform. It relies on parsing alone: no API keys and no headless browser are required.

Key capabilities

  • One extract() function returns the same dictionary shape for Instagram, GitHub, VK, Reddit, Substack, Bluesky, TikTok, and the other supported services.
  • Covers 250+ schemes, which the README states reach roughly 2,000 of the sites Maigret checks; the full list is in METHODS.md.
  • Recovers stable internal identifiers such as GAIA ID for Google, Facebook UID, Yandex Public ID, and Instagram pk, values that survive username changes.
  • Normalizes field names across platforms through the ontology in FIELDS.md, including username, fullname, created_at, and is_verified.
  • Ships a CLI: socid_extractor --url takes a profile URL and prints key-value fields directly to the terminal.
  • Supports batch runs with --skip-fetch-if-no-url-hint, which avoids the HTTP request when the URL matches no known site hint.
  • Handles universal detectors for forum templates such as Discourse and MediaWiki or Fandom, alongside named sites like GitHub, Stack Overflow over HTML and API, LeetCode, Medium, Substack, Paragraph, and WordPress.org.

Who uses it and how

  • OSINT investigators run the CLI against a single profile URL to pull account fields without writing parsing code.
  • Maigret consumes it as its extraction layer, so the library operates inside a larger username-search workflow.
  • Developers embed it in Python pipelines, fetching a page with requests.get and passing the response text to socid_extractor.extract().
  • Analysts use the stable IDs to correlate an account across leaks, archives, and search-engine indices where usernames have changed.
  • Batch-oriented users process URL lists and suppress unnecessary requests with --skip-fetch-if-no-url-hint.

Getting started

Install from PyPI with pip install socid-extractor on Python 3.10 or newer, or use pipx install socid-extractor for a clean CLI install on a workstation. The latest development version installs with pip install -U git+https://github.com/soxoj/socid-extractor.git.

How it compares

Among the tools named in the project's own documentation, Maigret is the best-known consumer rather than a competitor, and socid-extractor does the extraction work that other OSINT tools call into. It stands alone in this registry as a dedicated profile-to-record parser, since no comparable extraction library is listed here.

When to use it — and when not to

The tool is a stateless parser, so nothing like a database, object storage, or SMTP service has to be operated, but Google docs and maps contributions require cookies to be supplied. Users processing arbitrary links should expect --skip-fetch-if-no-url-hint to skip generic engines such as forum templates, and anyone needing the full coverage list must consult METHODS.md rather than the README. Note also that the tagline claims 150+ sites while the README claims 250+ schemes, a documentation inconsistency worth checking before relying on a specific platform.

project readme (upstream, from github) — read inline

socid_extractor

PyPI version Downloads/month Total downloads License

CI GitHub stars GitHub forks

Turn any public profile page into a structured account record — usernames, display names, bios, avatars, locations, joined-at dates, follower counts, external links, and the stable internal identifiers that uniquely pin an account across renames, redesigns, and deletions.

socid_extractor parses HTML pages and API responses from 250+ schemes and returns a flat, machine-readable dictionary of account fields. No API keys required, no headless browser — just a single function call on response text.

Why it's useful

  • Stable cross-service IDs. Get GAIA ID (Google), Facebook UID, Yandex Public ID, Instagram pk, and dozens more — values that survive username changes and let you correlate accounts across leaks, archives, and search-engine indices.
  • One uniform interface. Same extract() call for Instagram, GitHub, VK, Reddit, Substack, Bluesky, TikTok — no per-platform glue code on your side.
  • Field ontology. Normalized field names across platforms (username, fullname, created_at, is_verified, …) so downstream pipelines don't need 130 mappings.
  • Battle-tested. Powers Maigret and a number of other OSINT tools.

Installation

Python: 3.10+.

pip install socid-extractor

For a clean CLI install on a workstation:

pipx install socid-extractor

The latest development version:

pip install -U git+https://github.com/soxoj/socid-extractor.git

Quick start

As a CLI:

$ socid_extractor --url https://www.deviantart.com/muse1908
country: France
created_at: 2005-06-16 18:17:41
gender: female
username: Muse1908
website: www.patreon.com/musemercier
links: ['https://www.facebook.com/musemercier', 'https://www.instagram.com/muse.mercier/', 'https://www.patreon.com/musemercier']
tagline: Nothing worth having is easy...

As a Python library:

import requests
import socid_extractor

r = requests.get('https://www.patreon.com/annetlovart')
print(socid_extractor.extract(r.text))
# {'patreon_id': '33913189', 'patreon_username': 'annetlovart',
#  'fullname': 'Annet Lovart',
#  'links': "['https://www.facebook.com/322598031832479', ...]"}

Tip — batch runs: pass --skip-fetch-if-no-url-hint to skip the HTTP request when the URL doesn't match any known site hint (faster, but may skip generic engines such as forum templates):

$ socid_extractor --url https://example.com/foo --skip-fetch-if-no-url-hint

Supported sites

250+ schemes, covering roughly 2,000 of the sites Maigret checks — see METHODS.md for the full list.

A non-exhaustive sample:

  • Major networks: Facebook (user & group pages), Instagram, VK.com, OK.ru, Reddit, TikTok, Bluesky, Tumblr, Flickr
  • Google ecosystem: Google docs/maps contributions (cookies required), Google Play, YouTube
  • Mail.ru: my.mail.ru user mainpage, photo, video
  • Dev / writing platforms: GitHub, Stack Overflow (HTML + API), LeetCode, Hashnode, Medium, Substack, Paragraph, WordPress.org, Virgool
  • Forums (universal detectors): Discourse, MediaWiki / Fandom wikis, Mastodon
  • Niche / vertical: Chess.com, Roblox, MyAnimeList, Scratch, Wikipedia, DailyMotion, SlideShare, Weebly, Calendly, Amazon Author, Boosty, Warpcast (Farcaster), Fragment (TON/Telegram), Rarible, CSSBattle, lnk.bio, Spatial, TwitchTracker, Max (max.ru)

…and many others.

For data examples, see tests/test_e2e.py; for the parsing logic, see socid_extractor/schemes.py; for the field ontology, see FIELDS.md.

Use cases

  • Pivot from a profile to everything you can see. One call returns the visible info plus the hidden internal IDs the platform uses behind the scenes. Background reading: Week in OSINT — Getting a grasp on Google IDs.
  • Track accounts across renames, redesigns, and deletions. Stable IDs (GAIA, FB UID, Yandex Public ID, Instagram pk, …) let you re-identify the same person even when every visible field has changed. Background: Aware Online — User IDs in social-media investigations.
  • Search by cross-service UID. Once you have a stable identifier you can pivot into:
    • SQL / leaked databases (forum dumps, breach data) where the UID is the join key,
    • Google / Yandex / archive.org indices that captured URLs containing the UID.
  • Feed downstream OSINT tooling. A normalized record is much easier to ingest than per-site scrapers — used by Maigret and similar tools for enrichment.

Commercial Use

The open-source socid_extractor is MIT-licensed and free for commercial use without restriction — but page parsers break over time as platforms change their HTML and APIs, and they need active maintenance.

For serious commercial use — a hosted extraction API, or maintenance of the parsers your product depends on — reach out: 📧 [email protected]

  • Extraction API — integrate socid_extractor into your product

SOWEL classification

Maps to the following SOWEL techniques:

Tools using socid_extractor

  • Maigret — powerful namechecker that generates a report with all available info from accounts found across 3000+ sites.
  • TheScrapper — scrape emails, phone numbers, and social-media accounts from a website.
  • InfoHunter — open-source OSINT tool to search, collect, and analyze information online.
  • YaSeeker — gather all available information about a Yandex account by login/email.
  • Marple — scrape search-engine results for a given username.

Testing

Install the test extras from pyproject.toml, then run pytest:

pip install '.[test]'   # pytest, pytest-rerunfailures, pytest-xdist
python3 -m pytest tests/test_e2e.py -n 10 -k 'not cookies' -m 'not github_failed and not rate_limited'

Use pip install '.[dev]' instead if you also want flake8 / mypy / black (the full set used by CI).

Every new scheme must have an e2e test in tests/test_e2e.py hitting a real URL/API. Unit tests with inline fixtures (tests/test_socid_improvements.py) are also required but do not replace e2e coverage. See docs/testing-and-ci.md for details.

Developer documentation (architecture, modules, CI) lives in docs/.

Contributing

See the contributing guide if you want to add a new scheme or fix anything.

Frequently asked questions

Is socid-extractor free to use?

socid-extractor is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does socid-extractor do?

⛏️ The extraction engine behind Maigret: turn any profile URL into a structured OSINT record across 150+ sites

What is socid-extractor written in?

socid-extractor is primarily written in Python. Its source is publicly available at https://github.com/soxoj/socid-extractor, and it has 1,089 GitHub stars.