Matrix Public Rooms Extractor avatar

Matrix Public Rooms Extractor

Pricing

from $0.35 / 1,000 room records

Go to Apify Store
Matrix Public Rooms Extractor

Matrix Public Rooms Extractor

Point at ANY Matrix homeserver and extract its public room directory over the Client-Server API. One row per room: room ID, name, topic, member count, canonical alias, avatar, join rule, room type. Opaque next_batch pagination; optional token unlocks search/space filters.

Pricing

from $0.35 / 1,000 room records

Rating

0.0

(0)

Developer

Datamule

Datamule

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

5 days ago

Last modified

Share

Point at any Matrix homeserver and extract its public room directory — the list of rooms that homeserver publishes to the federation — over the Matrix Client-Server API (GET /_matrix/client/v3/publicRooms). One structured row per public room, paginated through the server's own opaque next_batch cursor.

Works against any Matrix homeserver (Synapse, Dendrite, Conduit, …) — they all speak the same Client-Server directory contract, so one actor reads them all: matrix.org, matrix.tchncs.de, gnome.modular.im, mozilla.modular.im, fedora.ems.host, and thousands more.

What you get

One row per public room, keyed on the always-present room_id:

FieldDescription
room_idCanonical room ID (e.g. !abc:matrix.org) — always present
nameRoom display name (nullable — many rooms are unnamed)
topicRoom topic / description (nullable)
canonical_aliasHuman alias, e.g. #community:matrix.org (nullable)
num_joined_membersJoined member count (may be 0)
avatar_urlRoom avatar mxc:// URI (nullable)
world_readableWhether history is world-readable
guest_can_joinWhether guests may join
join_rulee.g. public, knock, invite (nullable)
room_typee.g. m.space for spaces; null for regular rooms
_homeserverUrl / _server / _page / _rowIndex / _totalRoomCountEstimateProvenance

Input

FieldRequiredDescription
homeserverUrl✅Homeserver base URL, e.g. https://matrix.org
serverQuery a different server's directory through this homeserver (?server=) — usually needs a token
searchFull-text filter over name/alias/topic — uses POST, usually needs a token
roomTypeall (default) · spaces (m.space only) · rooms (exclude spaces)
accessTokenMatrix access token — unlocks search / room-type filters / federated queries
maxRecordsStop after N rooms (default 2000)
pageSizeRooms per page (default 100; server may cap lower)

Anonymous vs authenticated

The anonymous GET listing works on any homeserver that publishes its directory publicly — no token needed. The Matrix spec routes full-text search, room-type filters, and federated ?server= queries through the POST endpoint, which most homeservers gate behind an access token (they return M_MISSING_TOKEN). Supply accessToken to use those; leave it empty for a plain public-directory listing.

Example

{
"homeserverUrl": "https://matrix.org",
"maxRecords": 100
}

Use cases

  • Federation monitoring — track which rooms a homeserver publishes over time.
  • Community discovery — enumerate spaces and rooms across the Matrix network.
  • Moderation intelligence — surface newly-published rooms, aliases, topics.
  • Directory research — member-count and room-type distributions per server.

How it works

  • Anonymous GET /_matrix/client/v3/publicRooms by default; POST with a filter only when search / roomType is set.
  • Opaque-cursor pagination: the response next_batch is echoed as the next request's since; the walk stops when the server omits it. The total_room_count_estimate is treated as a hint, never a page terminator.
  • Rate limits (M_LIMIT_EXCEEDED) are honored via retry_after_ms backoff.
  • Fails fast (never a fabricated empty success) if the homeserver is unreachable, rejects the query (auth/forbidden), or the directory matched zero rooms.

Pricing

Pay-per-event: $0.0005 per room record (tiered volume discount by subscription tier). You pay only for rooms actually emitted.

Your max charge per run is respected: the run writes and bills only the room records it covers, asks the homeserver only for as many rooms as that budget pays for, and makes no request at all if the budget cannot cover one record. If a later directory page fails, the rooms already delivered are kept and the run finishes with an error instead of a silent partial success.