Gab OSINT Scraper
Pricing
from $1.99 / 1,000 results
Gab OSINT Scraper
Scrape public Gab posts, profiles, direct post URLs, and thread context for OSINT investigations, social media monitoring, research, and datasets.
Pricing
from $1.99 / 1,000 results
Rating
0.0
(0)
Developer
Inus Grobler
Maintained by CommunityActor stats
2
Bookmarked
180
Total users
74
Monthly active users
7 days ago
Last modified
Categories
Share
Extract full public Gab posts, profiles, and optional thread context from usernames, profile URLs, and direct post URLs into a clean Apify dataset. This Gab scraper is built for OSINT research, social media monitoring, brand monitoring, threat intelligence, academic research, and investigative workflows that need full Gab.com post text without maintaining a custom scraper.

Why Use This Gab Scraper?
- Scrape known Gab posts by URL and return full post text.
- Collect public Gab profile data and profile-linked posts.
- Expand a direct post into public thread context, including ancestors, replies, and quoted posts when available.
- Export results as JSON, CSV, Excel, XML, or through the Apify API.
- Use cost-first defaults for direct connections, concurrency, retries, and browser fallback without configuring advanced settings.
Best Use Cases
- OSINT investigations that need public Gab posts, usernames, profile URLs, and engagement metrics.
- Monitoring known Gab accounts, public personalities, communities, or narratives.
- Creating research datasets from specific Gab post URLs.
- Enriching an existing list of Gab URLs with post text, timestamps, media URLs, likes, reposts, and replies.
- Building repeatable full-post data pipelines through Apify Console, schedules, webhooks, or API integrations.
What Data Can You Extract?
This Actor returns full post and profile records:
post: full public Gab post data, including text, author, timestamp, engagement counts, media URLs, and canonical post URL.profile: public Gab profile data, including username, display name, bio, follower count, post count, avatar, and profile URL.
Example Output
{"record_type": "post","id": "105647844879148303","author_username": "TerrenceKWilliams","author_display_name": "TerrenceKWilliams","content": "Public post text from Gab...","timestamp": "2021-01-30T20:43:52.000Z","likes": 123,"reposts": 12,"replies": 8,"media_urls": ["https://..."],"post_url": "https://gab.com/TerrenceKWilliams/posts/105647844879148303","source_type": "post"}
How To Run
Add Gab usernames, profile URLs, or direct post URLs to targets. The Actor automatically detects which type each entry is and returns full post records where posts are available.
Full Post Example Input
{"targets": ["https://gab.com/TerrenceKWilliams/posts/105647844879148303"],"includeThreadContext": false,"maxItems": 1}
Scrape A Gab Post With Thread Context
Use this when you want the target post plus related public replies, ancestor posts, and quoted posts exposed by Gab.
{"targets": ["https://gab.com/TerrenceKWilliams/posts/105647844879148303"],"includeThreadContext": true,"maxItems": 25}
Scrape Public Gab Profiles
{"targets": ["support"],"includeThreadContext": false,"maxItems": 10}
Input Options
targets: Gab usernames, profile URLs, or direct post URLs. You can mix values likesupport,@support,https://gab.com/support, andhttps://gab.com/user/posts/123.includeThreadContext: expands direct post URL runs with public thread context untilmaxItemsis reached.maxItems: maximum number of post results. Profile records do not count against this limit.
The Actor defaults to direct connection mode, balanced cost mode, disabled browser fallback, maximum concurrency of 4, and maximum request attempts of 3. For a lower-cost configuration, pass costMode: "cheap" (concurrency 2, request attempts 2). Advanced API users may still pass proxyMode, costMode, enableBrowserDiscovery, maxConcurrency, and maxRetries, but the Apify Console keeps those controls hidden to reduce setup friction.
Cost And Reliability Tips
- Use direct Gab post URLs in
targetswhen possible. Direct post URLs are the fastest full-post input. - Keep
proxyModeset todirectfor known public posts and profiles unless the run is blocked or incomplete. - Keep
enableBrowserDiscoveryoff unless you need extra profile post discovery. - Keep
includeThreadContextoff unless you need thread replies or quoted post context. - The default Actor run memory is 512 MB. Direct post-only runs can also be tested at 256 MB; browser discovery and max-coverage runs should use 1024 MB or more.
Python API Example
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run_input = {"targets": ["https://gab.com/TerrenceKWilliams/posts/105647844879148303",],"includeThreadContext": False,"maxItems": 1,}run = client.actor("thescrapelab/gab-osint-scraper").call(run_input=run_input)if run is None:raise RuntimeError("Actor call returned no run or storage metadata")dataset_id = (run["defaultDatasetId"] if isinstance(run, dict) else run.default_dataset_id)for item in client.dataset(dataset_id).iterate_items():print(item)summary = client.key_value_store((run["defaultKeyValueStoreId"] if isinstance(run, dict) else run.default_key_value_store_id)).get_record("RUN_SUMMARY")if summary:print(summary["value"])
Run Summary And Source Timing
The Output panel links to the default Dataset and to RUN_SUMMARY in the run's key-value store. The summary is separate from dataset rows and creates no result event. It records the collection interval (startedAt, finishedAt), confirmed dataset writes (itemsPushed, savedRecordCounts), resultLimitReached, and diagnostic counts for HTTP attempts/retries, hydration retries, failed post/profile targets, metadata fallbacks and identity mismatches.
WITH_RESULTS means rows were saved; it does not promise that every historical post was found. PARTIAL indicates a collection/cleanup error or targets that exhausted their existing attempts. NO_RESULTS means no rows were saved without a collection error; it is not proof that a profile has no public posts. FAILED means collection raised an error before a confirmed dataset write. Summary outcomes describe diagnostics and do not replace the Apify run status.
HTTP counters exclude warm-up traffic and browser requests. Metadata-fallback counts describe hydration operations and can exceed the number of saved rows. Profile rows do not consume maxItems. A lost dataset-write response can make itemsPushed lower than the actual Dataset count; that uncertain batch is not replayed during shutdown. Export the existing Dataset before deciding to run another paid collection.
RUN_SUMMARY is best effort. Input validation or proxy setup failures before collection, a forced termination, or a storage failure can leave it absent. Summary storage is attempted for at most two seconds so it cannot indefinitely hold up completed collection. Use the Dataset and run logs in that case; absence does not mean the run returned no data.
The row's timestamp is the source's post publication time, when provided. post_url / profile_url identify the canonical source and source_url identifies the collection context. Summary times describe this collection interval, not a separate retrieval time for each row. Missing fields remain unknown; metadata-only fallback may provide less detail than API/embedded post data.
Retention And Deletion In Your Workflow
Keep only data needed for your intended use and choose a retention period for your own Dataset exports and downstream copies. To investigate a correction or deletion request, locate affected records using their IDs and source URLs, identify the runs and copies you control, and remove or correct those copies through their storage controls. Check the scope of any Dataset or key-value-store deletion before confirming it, since it can affect other records from the run. Copies held by another organisation require a separate request to that organisation.
The Actor does not automatically delete existing customer Datasets, add a consent gate, or filter existing supported collection workflows. Source timing and provenance help you assess output; they do not establish a legal basis or blanket compliance for your intended processing.
Common Workflows
Monitor Known Gab Posts
Add direct post URLs to targets and schedule the Actor if you want repeated checks.
Collect Thread Context
Use direct post URLs in targets with includeThreadContext: true when the investigation needs the surrounding public conversation, not only the target post.
Build A Full Gab Post Dataset
Add usernames, profile URLs, or direct post URLs to targets, set maxItems, and export the default dataset in your preferred format.
Limitations
- This Actor extracts public data only.
- Private, deleted, unavailable, or blocked Gab content cannot be scraped.
- Profile-linked post collection can vary because Gab may expose different public post data over time.
- Cheap and balanced modes avoid browser fallback by default to reduce cost. Enable browser discovery if you need best-effort profile post-link discovery.
- Keyword, search, tag, hash, and explore discovery inputs are not supported because they are less reliable and more costly.
- Residential proxy mode can help when direct requests are blocked, but it can increase Apify platform usage and runtime.
Pricing
This Actor uses pay-per-result pricing. Each dataset item is one result. Apify platform usage is kept low by default through 512 MB memory, direct connection mode, low retry counts, and disabled browser fallback. Larger or browser-heavy runs may cost more platform usage, especially when residential proxy mode is enabled.
FAQ
Can I scrape Gab without a proxy?
Yes. proxyMode: "direct" is the default because it is the lowest-cost option for known public Gab posts and profiles. Switch to residential only if direct mode is blocked or incomplete.
Will the results include post text?
Yes. This Actor is configured as a full post scraper. Full post records include the content field when Gab exposes the post publicly.
Can this Actor scrape Gab threads?
Yes. Set includeThreadContext to true for direct post URL runs. The Actor will collect available public ancestors, replies, and quoted posts until it reaches maxItems.
Why did a profile return only a profile record?
Gab does not always expose profile post links through the low-cost HTTP/API path. Enable enableBrowserDiscovery or use costMode: "maxCoverage" if you want the Actor to spend more compute trying browser-based profile discovery.
Can I use the results in another app?
Yes. Every run stores results in the default Apify dataset, which can be exported or read through the Apify API.
More OSINT Actors
- Use Gab OSINT Scraper for public Gab profiles, posts, and threads.
- Use GETTR Scraper for public GETTR profiles, posts, timelines, and search.
- Use 4Chan Thread & Board Scraper for public boards and threads.
- Use Pastebin Keyword Search & OSINT Scraper for keyword and exposure monitoring across public pastes.
- Use Telegram Channel Scraper for public channel posts and metadata.
Migrating retired discovery inputs
The retired fields keywords, keywordSearches, searchTerms, browserDiscoveryEnabled, searchMode, searchProbeBatchSize, searchCandidateMultiplier, searchCandidateFloor and searchCandidateCap have no supported keyword-discovery replacement in this Actor. Supply usernames, public profile URLs or direct post URLs in the current supported input fields. Keyword values cannot be converted into account targets automatically; choose the public accounts or posts you intend to monitor. Unsupported discovery inputs should be removed before retrying.
