Gab Posts Scraper avatar

Gab Posts Scraper

Pricing

from $1.75 / 1,000 posts

Go to Apify Store
Gab Posts Scraper

Gab Posts Scraper

Find public Gab posts by keyword, post URL, or profile, or collect public profiles by username or URL. Get post text, authors, dates, engagement, media, links, mentions, tags, and source context in an Apify dataset.

Pricing

from $1.75 / 1,000 posts

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

🔍 Find public Gab posts and profiles

For researchers, analysts, and developers, this Actor finds public Gab posts by keyword, post URL, or profile. It also collects public profiles by username or profile URL. It saves structured post and profile data, including text, authors, dates, engagement, media, links, and the input context that first found each row. You can review public Gab activity in a dataset instead of copying posts and profiles by hand.

📦 Returned Gab post and profile data

Each run writes one row for each eligible public post or profile to the default dataset. Post rows include text, author details, publication time, engagement counts, media, shared links, mentions, tags, and source context when Gab provides them. Profile rows include the public profile URL, username, display name, biography, account counts, profile images, verification status, and source context when available.

When the same public post or profile is found through another submitted keyword, URL, username, or similar value, the first eligible match is saved and later matches are ignored. The sourceContext object records only the one value that first produced the saved row. Fields that Gab does not expose may be absent.

▶️ Run a Gab collection

  1. Choose Posts or Profiles as the result type.
  2. For posts, choose Keywords, Post URLs, Profile username, or Profile URL. For profiles, choose Username or Profile URL.
  3. Enter the values for the method you chose. Other fields stay visible but are ignored.
  4. For a direct post URL, turn on Include thread context when you also want other available public posts from that post's thread.
  5. Set Maximum results to cap the run. Leave it empty to return all available results until the source is exhausted. The schema has no upper bound for this field.
  6. Start the run and open datasetItems in the Output panel.

Only public Gab content that the source makes available can be returned. Private, deleted, blocked, or otherwise unavailable content is outside the Actor's scope. No Gab source login or API key is required for public data.

⚙️ Input

Input fields

FieldTypeWhat it does
resultTypestringRequired. Chooses whether this run returns public Gab posts or public Gab profiles.
postOptionsobjectSets how to find public posts. Search by keywords, retrieve direct post URLs, or get posts linked from a profile username or profile URL. Fields for other choices stay visible and are ignored.
postOptions.findPostsBystringChooses one post method: keywords, postUrls, profileUsernames, or profileUrls.
postOptions.keywordsarray of stringsOne or more words or phrases to search for public Gab posts. Used when findPostsBy is keywords.
postOptions.postUrlsarray of objectsOne or more public Gab post URLs. Used when findPostsBy is postUrls.
postOptions.postUrls[].urlstring URLOne public Gab post URL.
postOptions.includeThreadContextbooleanFor postUrls, includes other available public posts from each post's thread. It is ignored for other post methods.
profileOptionsobjectSets how to find public profiles. Use a username or a profile URL. Fields for the other choice stay visible and are ignored.
profileOptions.findProfilesBystringChooses profileUsernames or profileUrls for a profile run.
profileUsernamesarray of stringsOne or more public Gab usernames. Used for profile posts or profile runs that use usernames.
profileUrlsarray of objectsOne or more public Gab profile URLs. Used for profile posts or profile runs that use profile URLs.
profileUrls[].urlstring URLOne public Gab profile URL.
maxItemsintegerStops after this many results. Leave it empty to return all available results until the source is exhausted. The schema has no upper bound.

Fields for a different method remain in the form but are ignored. Use separate runs when you need a different result type or method.

Input example

This example is copied from the public input of a successful current-beta default-input run:

{
"resultType": "posts",
"postOptions": {
"findPostsBy": "keywords",
"keywords": [
"gab"
],
"includeThreadContext": false
},
"maxItems": 20
}

🧾 Output

The Output panel provides datasetItems, a string link to the default dataset overview. Each saved row has one of the two shapes below. Fields that are not required may be absent when Gab does not expose them.

Dataset link

FieldTypeWhat it does
datasetItemsstring URLOpens the successful post and profile rows from this run in the default dataset.

Post row

FieldTypeWhat it does
recordTypestringConstant value post for a post row.
postobjectRequired. Holds the public post data.
post.urlURL stringRequired. The canonical public URL of the post.
post.textstringRequired. The full public text of the post when Gab exposes it.
post.authorobjectRequired. Public identity details for the post author.
post.author.usernamestringRequired. The author's public Gab username.
post.author.displayNamestringThe author's public display name when available.
post.author.profileUrlURL stringThe author's canonical public profile URL when available.
post.publishedAtdate-time stringThe source publication time when available.
post.engagementobjectAvailable public engagement counts.
post.engagement.likesintegerPublic like count when available.
post.engagement.repliesintegerPublic reply count when available.
post.engagement.repostsintegerPublic repost count when available.
post.mediaarray of objectsPublic media attached to the post when available.
post.media[].urlURL stringRequired within a media object. The public media URL.
post.media[].mediaTypestringMedia type reported by the source when available.
post.media[].altTextstringMedia alternative text when available.
post.sharedLinksarray of objectsUseful public link previews found in the post when available.
post.sharedLinks[].urlURL stringRequired within a shared-link object. The URL shared in the post.
post.sharedLinks[].titlestringPublic title of the shared link when available.
post.sharedLinks[].descriptionstringPublic description of the shared link when available.
post.sharedLinks[].imageUrlURL stringPublic preview image URL when available.
post.sharedLinks[].siteNamestringPublic site name shown for the shared link when available.
post.mentionsarray of objectsPublic accounts mentioned in the post when available.
post.mentions[].usernamestringRequired within a mention object. The public Gab username mentioned in the post.
post.mentions[].profileUrlURL stringPublic profile URL for the mentioned account when available.
post.tagsarray of stringsPublic tags associated with the post when available.
post.sourceContextobjectRequired. The input context that first produced this row.
post.sourceContext.typestringRequired. One of keyword, postUrl, profileUsername, profileUrl, or thread.
post.sourceContext.valuestringRequired. The single keyword, URL, username, or post URL that first produced this row.

Example post row

This unshortened row is copied from a successful current-beta keyword run and is shown as returned:

{
"recordType": "post",
"post": {
"url": "https://gab.com/Mike8877/posts/117343232928215624",
"text": "@Kimmie_social Welcome to gab, kimmie.",
"author": {
"username": "Mike8877",
"displayName": "Mike8877",
"profileUrl": "https://gab.com/Mike8877"
},
"sourceContext": {
"type": "keyword",
"value": "gab"
},
"publishedAt": "2026-09-27T13:27:19.171Z",
"engagement": {
"likes": 0,
"replies": 0,
"reposts": 0
},
"mentions": [
{
"username": "Kimmie_social",
"profileUrl": "https://gab.com/Kimmie_social"
}
]
}
}

Profile row

FieldTypeWhat it does
recordTypestringConstant value profile for a profile row.
profileobjectRequired. Holds the public profile data.
profile.urlURL stringRequired. The canonical public profile URL.
profile.usernamestringRequired. The public Gab username.
profile.displayNamestringThe public display name when available.
profile.biostringThe public profile biography when available.
profile.countsobjectAvailable public account counts.
profile.counts.followersintegerPublic follower count when available.
profile.counts.followingintegerPublic following count when available.
profile.counts.postsintegerPublic post count when available.
profile.avatarUrlURL stringPublic profile avatar URL when available.
profile.coverImageUrlURL stringPublic profile cover image URL when available.
profile.isVerifiedbooleanWhether Gab marks the profile as verified.
profile.sourceContextobjectRequired. The input context that first produced this row.
profile.sourceContext.typestringRequired. One of profileUsername or profileUrl.
profile.sourceContext.valuestringRequired. The single username or profile URL that first produced this row.

Example profile row

This unshortened row is copied from a successful current-beta profile run and is shown as returned:

{
"recordType": "profile",
"profile": {
"url": "https://gab.com/Dissenter",
"username": "Dissenter",
"sourceContext": {
"type": "profileUsername",
"value": "Dissenter"
},
"displayName": "Dissenter",
"bio": "The News Magazine from Gab AI",
"counts": {
"followers": 1455,
"following": 0,
"posts": 3995
},
"avatarUrl": "https://m3.gab.com/accounts/avatars/001/015/816/original/d691919b7f17d4d2.png",
"coverImageUrl": "https://m3.gab.com/accounts/headers/001/015/816/original/3d4e63687ffefe96.png",
"isVerified": true
}
}

💳 Pricing

This Actor uses pay-per-event pricing. Each saved public post row costs $0.00175, and each saved public profile row costs $0.00175. A run with no saved rows has no post or profile row event.

Charged rowPriceWhat is billed
Post$0.00175One saved public post row.
Profile$0.00175One saved public profile row.

🔌 Integrations

Open the dataset in the Apify Console, download it from the run, or use the Apify API, schedules, and webhooks in your workflow.

❓ FAQ

What happens when the same post matches more than one keyword?

The first eligible match is saved. Later matches are ignored, and sourceContext keeps the keyword that first produced the row. The row does not collect later matches.

Can I retrieve one post and include its thread context?

Yes. Choose Post URLs, enter the public post URL, and turn on Include thread context. The run can add other available public posts from that post's public thread.

Can I collect posts and profile rows in one run?

No. Choose Posts or Profiles for each run. A post run can find posts by keyword, direct post URL, or profile, while a profile run returns profile rows. Use separate runs when you need both shapes.

Why is a field missing from a row?

Gab may not expose every field for every public post or profile. Optional fields are left out when the source does not provide them.

Do I need a Gab login or API key?

No. The Actor uses public Gab data and does not require source authentication. It cannot return private, deleted, blocked, or otherwise unavailable content.

Does an empty result limit return every Gab post?

No. Leaving maxItems empty returns all available results until the source is exhausted. It does not promise every later match or every historical post that Gab may have.

📝 Changelog

v0.0 (27-09-2026)

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré