Skip to main content
GET
X community members & profile export API guide
Scrape X community members into explicit profile rows. Store the community and user IDs with every cursor result. Keep the username, bio, verification, follower count, and cursor.

X community member scraping questions

Scrape X community members

Call GET /api/v1/x/communities/{id}/members with the numeric community ID. Store the community ID and stable user ID. Keep the username, profile name, bio, location, and verification. Record an ISO 8601 collection time before requesting another cursor. Store available follower and following counts. Keep the profile image URL. Store the cursor returned with each profile batch. Save the page before advancing its opaque cursor. Use has_next_page as the only pagination guard. Send another request only for the boolean true. Reuse the exact next_cursor. Deduplicate a resumed page by community ID and user ID. Mark credit-bounded, failed, or interrupted runs as partial. Use the moderators route for role-specific profiles. The members route returns every visible member profile.

What is the best way to extract data from a Twitter community?

Replace “data” with the community records the workflow needs. Use the info route for the community name and description. Use the members route for user IDs and profile fields. Use the moderators route for role-specific profiles. Retrieve recent Community posts through the tweets route. Search Community posts for a keyword through Community Search. Keep community profiles and tweets in separate tables. Join them with stable community and user IDs. Save page cursors, collection times, row counts, and completion states. Export JSON for applications. Create CSV or XLSX only when analysts need rows. Never flatten membership, moderator roles, and tweet activity into one ambiguous record.

How do I scrape members from an X community?

Call GET /api/v1/x/communities/{id}/members with the numeric community ID. Store each user ID, username, profile name, bio, and verification state. Add the follower count and page cursor. Stop when has_next_page is false. Until then, send next_cursor without modification. Save each profile page before advancing its cursor. Deduplicate resumed pages by stable user ID. Write the community ID into every exported profile record. Record the collection time because usernames, bios, verification, and audience counts can change. Do not infer moderator status from membership. Use the dedicated moderators route for that role. Mark an interrupted or credit-bounded export as partial.

Twitter community API

Choose the route that matches the record. The info route returns community details. The members route returns member profiles. The moderators route returns moderator profiles. The tweets route returns recent community posts. Community search returns posts matching a query. For member exports, build one roster row per community ID and user ID. Keep profile fields, source cursor, collection time, and completion state. For tweet exports, store Tweet ID, author ID, text, timestamp, engagement, media, and cursor. Keep those schemas separate. Use stable IDs for joins. Respect API-key scope, credits, page limits, and rate limits.

How should I compare community member lists?

Complete every cursor page before comparing snapshots. Mark interrupted runs as partial. Use community ID plus user ID as the comparison key. Report newly observed and missing members separately. Never assign a reason for an addition or removal. Refresh a profile only when later work requires current follower counts, following counts, or biographies.
Requested result counts are upper bounds for paid authenticated calls. Low credit balances can reduce a page or ID list. If zero results are affordable, Xquik returns 402 insufficient_credits.
1 credit per result returned · All plans from $0.00012/credit
Use GET /x/communities/{id}/members for member exports, CRM enrichment, audience review, or moderator handoff. It creates one row per community member. Store community_id, member_id, username, display_name, bio, follower_count, verified, profile_image_url, and next_cursor.

Build a community member export

The community member export becomes complete after every cursor page finishes. Save each profile page before advancing its cursor. Mark credit-bounded, failed, and interrupted runs as partial membership snapshots. Mark the export complete only after has_next_page is false. Community membership shows roster inclusion. It does not prove posting activity. Retrieve recent Community posts through Community Tweets. Use Community Search to find posts by keyword. Join those posts to member profiles by manifest_id, community_id, and stable user ID. Use Community Moderators for role-specific profiles. Verification and follower counts do not prove a moderator role. X Lists use different IDs and membership rules. Review X’s official List Members Lookup before migrating a List workflow. Store source_type and its source ID. Use community_id for Community rows and list_id for List rows. Join and deduplicate with the source ID plus member_id. Use this route to enumerate profiles that belong to one community. Keep the community ID on every exported row. A username alone cannot identify its source community. Choose columns that support the next task:
  • User ID, username, and profile name.
  • Biography, location, and verification state.
  • Follower and following counts.
  • Store the Community ID and cursor with every page’s ISO 8601 collection time.
Use this Community member roster for directories, CRM enrichment, or moderator review. Do not label every member as a moderator. Use the moderators route to retrieve only moderator profiles. Treat has_next_page as the only pagination guard. The next request requires the boolean value true. Pass next_cursor without modification. Persist each page before saving its cursor. Deduplicate repeated results by user ID after resuming a job. Profile fields can change after collection. Record an ISO 8601 time for every returned profile. Refresh the profile through user lookup when the workflow requires current bios, follower counts, following counts, or avatars.

Compare community membership snapshots

Collect every cursor page before comparing membership. Mark interrupted runs as partial. Use community ID and user ID as the comparison key. Record newly observed and missing members separately. Avoid inferring why a membership changed. Keep the snapshot’s page count, row count, first cursor, and completion time. These values help reviewers distinguish a real change from an incomplete export. Store membership notes outside returned profile fields. Never place private moderation notes inside a public username or biography column. When another process adds moderator status, store it in a separate community_role column.

Path parameters

string
required
Community ID (numeric string).

Query parameters

string
Pagination cursor from a previous response. Omit for the initial request.
number
Results per request. Range: 20-200. Default: 20.

User result filters

These filters apply before billing. Selective filters can return fewer rows.
integer
Require this minimum follower count. Filtering happens before billing.
integer
Allow this maximum follower count. Missing counts pass this filter.
integer
Require this minimum following count.
integer
Allow this maximum following count. Missing counts pass this filter.
integer
Require this minimum post count.
integer
Allow this maximum post count. Missing counts pass this filter.
integer
Require this minimum account age in days.
boolean
When true, only return verified profiles.
string
Match the exact verification type.
boolean
When true, require a profile website.
boolean
When true, require a profile location.
string
Require every comma-separated or line-separated bio term.
string
Require this text in the profile location.
string
Require this text in the username.

Headers

string
Full account key. Sessions and OAuth also work.
string
Bearer xq_your_guest_key_here for paid_reads.

Response

200 OK

object[]
Array of community members. User object fields.
string
User ID.
string
X username.
string
Display name.
string
Profile bio.
number
Reports the profile’s follower count.
number
Following count.
boolean
Verified status.
string
Profile image URL.
string
Profile location.
string
Account creation date (ISO 8601).
number
Total number of tweets posted. Omitted if unavailable.
string
Cover/banner image URL. Omitted if unavailable.
number
Total number of media tweets posted. Omitted if unavailable.
string
Website URL from profile. Omitted if empty.
number
Total number of tweets liked. Omitted if unavailable.
boolean
Whether the user has custom timelines. Omitted if unavailable.
boolean
Whether the user is an X translator. Omitted if unavailable.
string[]
Country codes where the account is withheld. Omitted if empty.
boolean
Whether the account is flagged as possibly sensitive. Omitted if unavailable.
string[]
Lists pinned Tweet IDs. Omitted if none.
boolean
Whether the account is marked as automated. Omitted if unavailable.
string
Username of the account operator if automated. Omitted if not automated.
boolean
Whether the account is unavailable. Omitted if available.
string
Reason the account is unavailable. Omitted if available.
string
Verification type (e.g. Business, Government). Omitted if not verified or standard blue check.
object
Structured profile bio with entity annotations. Omitted if unavailable.
boolean
Whether the account has X Premium verification. Omitted if unavailable.
boolean
Normalized verification status. Omitted if unavailable.
string
Profile banner URL. Omitted if unavailable.
boolean
Indicates whether the account protects its Tweets. Omitted if unavailable.
string
Role within the requested community context. Omitted outside community results.
boolean
Whether more results are available.
string
Cursor for subsequent results. Pass as the cursor query parameter.

400 Invalid community ID

The community ID is empty or invalid.

401 Unauthenticated

Anonymous requests get WWW-Authenticate: Bearer and a guest wallet checkout action. This is not a Payment challenge.
Missing or invalid API key.

402 Payment required

Account keys get account options; guest keys get guest top-up only. No checkout starts automatically. Confirm any payment action.

404 Community not found

The community could not be resolved. Check the community ID.

502 X API unavailable

The read service returned an error. Retry after a short delay.

429 Rate limit exceeded

Your tier rate limit was exceeded. Wait for the Retry-After header before retrying.

424 Dependency failed

Send xquik-api-contract: 2026-04-29 to opt in to HTTP 424. Default v1 returns HTTP 502 with x_api_unavailable.
Next steps. Community Info for community details, or Community Moderators to list moderators.