GFY APIgfy.com ↗
Access latest GFY.com forum posts, topics, and replies via API. Filter by time range, content type, and topic vs. reply. Returns author, channel, and content preview.
What is the GFY API?
The GFY.com API exposes 1 endpoint — get_new_posts — that returns the latest forum activity from GFY.com (GoFuckYourself.com), the adult webmaster industry forum. Each post object includes 9 fields: node_id, title, url, author, author_url, date, channel, channel_url, content_preview, and post_type. The endpoint supports pagination up to 20 pages and filtering by time range, content type, and whether to return only thread starters or include replies.
curl -X GET 'https://api.parse.bot/scraper/4ac85c33-b292-4453-99de-71b6a1d5700c/get_new_posts?time_filter=today&content_type=all&new_topics_only=true' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace gfy-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: GFY Forum API — browse latest adult webmaster industry posts."""
from parse_apis.gfy_com_api import GfyCom, TimeFilter, ContentType, InputFormatInvalid
client = GfyCom()
# Fetch today's new discussion topics, capped at 10 total items.
try:
for post in client.posts.list(
time_filter=TimeFilter.TODAY,
content_type=ContentType.DISCUSSIONS,
limit=10,
):
print(post.title, "|", post.channel, "|", post.author)
except InputFormatInvalid as e:
print(f"Invalid filter parameters: {e.message}")
# Drill into the most recent post from the past week.
latest = client.posts.list(time_filter=TimeFilter.LAST_WEEK, limit=1).first()
if latest is not None:
print(f"\nLatest post: {latest.title}")
print(f" Author: {latest.author} ({latest.author_url})")
print(f" Date: {latest.date}")
print(f" Preview: {latest.content_preview[:120]}")
print(f" Link: {latest.url}")
print("\nexercised: posts.list with TimeFilter + ContentType filters")
Fetches the latest forum activity (new topics and/or replies) with filtering by time range, content type, and whether to show only new topics or include replies. Returns paginated results ordered by most recent first. Each page returns up to per_page posts. The upstream caps traversal at 20 pages.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-indexed). Maximum 20 pages. |
| per_page | integer | Number of posts per page, between 1 and 50. |
| time_filter | string | Time range to filter posts. Omitting defaults to last_month. |
| content_type | string | Filter by content type. Omitting defaults to all. |
| new_topics_only | boolean | When true, shows only new topics (thread starters). When false, includes replies as well. |
{
"type": "object",
"fields": {
"page": "current page number",
"posts": "array of post objects with node_id, title, url, author, author_url, date, channel, channel_url, content_preview, and post_type",
"per_page": "posts per page requested",
"post_count": "number of posts returned on this page"
},
"sample": {
"data": {
"page": 1,
"posts": [
{
"url": "https://gfy.com/forum/simply-business/fucking-around-business-discussion/31467631-tube-adult-content-link-exchange",
"date": "2026-08-13T04:51:09-07:00",
"title": "Tube/adult content link exchange",
"author": "cowsellerboy",
"channel": "Fucking Around & Business Discussion",
"node_id": "31467631",
"post_type": "starter",
"author_url": "https://gfy.com/member/409474-cowsellerboy",
"channel_url": "https://gfy.com/forum/simply-business/fucking-around-business-discussion",
"content_preview": "I am running a high quality adult tube and interested in high quality link exchanges."
}
],
"per_page": 5,
"post_count": 5
},
"status": "success"
}
}About the GFY API
What the API Returns
The get_new_posts endpoint returns paginated forum activity from GFY.com, ordered most-recent-first. Each item in the posts array includes a node_id (unique post identifier), title, url, author, author_url, date, channel, channel_url, content_preview, and post_type. The response also surfaces page, per_page, and post_count so you can build pagination logic or progress tracking.
Filtering Options
The endpoint accepts four optional filters. time_filter limits results to a recent window — omitting it defaults to the last month. content_type narrows results to a specific category of post; omitting it returns all types. new_topics_only (boolean) controls whether replies appear alongside thread starters — set it to true to track only new discussions, false to include all activity. per_page accepts values between 1 and 50, and page supports up to 20 pages of results.
Pagination and Coverage
The API is 1-indexed on the page parameter and caps at page 20 per request cycle. The post_count field in each response reflects the actual number of posts returned on that page, which may be less than per_page on the final page. There is no cursor-based pagination; sequential page increments are the intended navigation pattern.
Forum Context
GFY.com is a long-running vBulletin-based community for adult industry webmasters covering traffic, monetization, affiliate programs, content production, and industry news. The channel and channel_url fields identify which subforum a post belongs to, enabling downstream filtering by topic area.
The GFY API is a managed, monitored endpoint for gfy.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when gfy.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official gfy.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Alert a Slack channel when new topics appear in a specific GFY.com subforum using the
channelfield - Track which authors are most active by aggregating
authorvalues across paginatedget_new_postsresponses - Build a digest of adult industry webmaster discussions filtered by
time_filterfor daily or weekly newsletters - Monitor new thread starters only (using
new_topics_only: true) to catch announcements without reply noise - Index GFY.com post titles and
content_previewtext for keyword-based relevance ranking in a research tool - Identify trending subforums by counting posts per
channelover a rolling time window - Feed a competitive intelligence dashboard with new monetization or traffic discussions from the webmaster community
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does GFY.com have an official developer API?+
What does the `post_type` field distinguish between?+
post_type field differentiates thread-starting posts from replies within an existing thread. Combined with the new_topics_only boolean parameter, it lets you filter responses client-side or at request time to track only original topics versus all forum activity.Is full post body text available, or only a preview?+
content_preview field, not the full post body. Individual post URLs are included via the url field. Full post content per thread is not currently exposed by this endpoint. You can fork the API on Parse and revise it to add a post-detail endpoint that returns complete body text.Can I retrieve posts from a specific subforum or channel directly?+
get_new_posts endpoint does not accept a channel ID or name as a query parameter. Each returned post includes channel and channel_url fields, so channel-based filtering must be applied client-side after fetching results. You can fork the API on Parse and revise it to add a channel filter parameter.What is the freshness of the data, and how far back does the `time_filter` reach?+
time_filter defaults to posts from the last month. The exact supported values determine the maximum lookback window. Historical archives or posts beyond the supported time filter range are not currently accessible through this endpoint.