Export Stack Internal Community members to CSV with API v3. The standalone HTML page is the version to use. The Python scripts remain in this repository only for historical reference.
- Download so4t_community_members.html and open it in a current version of Chrome, Edge, Firefox, or Safari. It has no installation, build step, Python dependency, or external file dependencies. An internet connection to your API is required.
- Enter your Stack Internal site URL and an API access token. Use an Enterprise site URL such as
https://SUBDOMAIN.stackenterprise.co, or a Business URL such ashttps://stackoverflowteams.com/c/TEAM-NAME. - Load communities, select one or more, and prepare the CSV files.
- Download an individual community CSV or, when multiple communities are selected, a combined CSV.
For Enterprise, get a Bearer token from your site's /api/v3 page. For Business, generate a personal access token in your account settings.
The export includes Name, Email, Member Since, Is SME, Job Title, and Department. The combined CSV also includes Community, with one row per membership: someone in two selected communities appears twice. Email is visible through API v3 only to site admins (or to the current user), so use a token with site admin access for a complete export. Missing user records and email addresses are left blank and counted by row on the page. Empty communities produce a CSV containing just the column headers.
CSV files use UTF-8 with a byte order mark for spreadsheet compatibility. Quotes, commas, and line breaks are escaped. Values beginning with spreadsheet formula characters or tab/newline characters are prefixed with an apostrophe so they are treated as text.
The token stays in the open page's memory and is cleared when you click Clear session or leave the page. It is not saved to browser storage or sent in URLs. Clear session also cancels an export or rate-limit wait. CSV files are prepared in your browser. The tool sends authenticated GET requests only to your instance's API v3 endpoint; Business URLs use https://api.stackoverflowteams.com/v3/teams/TEAM-NAME.
The page uses GET /communities, GET /communities/{communityId}, and GET /users. Community and user lists are paginated with page and pageSize=100; user records are joined to memberships by user ID. There are no API v2 calls or fallbacks. Rate limits are respected with bounded retries, and a failed export does not offer partial files as complete.
The supplied API v3 schema documents the Enterprise community endpoints. The Business URL mapping is preserved from the historical Python client, but its community endpoints are not listed in that schema and could not be verified here.
Because the page calls the API directly from the browser with an Authorization header, your API instance must permit the page's origin, GET method, and Authorization header through CORS, including the OPTIONS preflight. Opening a local file typically sends an origin of null. If that is blocked, host the same HTML file on an origin your instance allows or on the API's own origin. Merely serving it from localhost does not grant cross-origin API access. Hosting the page does not require the Python scripts. See the CORS documentation.
For cross-origin rate-limit handling, the API should also expose Retry-After, x-burst-throttle-calls-left, x-burst-throttle-seconds-until-full, x-token-bucket-calls-left, and x-token-bucket-seconds-until-next-refill through Access-Control-Expose-Headers. If headers are unavailable, HTTP 429 responses use a bounded exponential retry delay. Requests time out after 30 seconds; authentication failures and unavailable endpoints are reported on the page.
The HTML embeds the official @stackoverflow/stacks 3.0.2 compiled stylesheet and its MIT license. Forms, buttons, checkboxes, notices, focus states, and design tokens follow the Stacks design system. Custom CSS only handles page layout. No CDN, remote fonts, or JavaScript libraries are loaded at runtime.
To update the styles, obtain a pinned Stacks package, replace the contents of <style id="stacks-css"> with its dist/css/stacks.min.css, preserve the license, and verify the component markup against that version's documentation. Before embedding, replace literal </style sequences inside SVG data URLs with %3C/style so the HTML parser cannot terminate the stylesheet early. This is the only change to the bundled stylesheet.
For development checks, install Node.js 20+ and Google Chrome, then run npm ci and npm test. Set CHROME_PATH if Chrome is installed at a custom path. These tools are only needed for tests, not to run the HTML page. The tests open the actual local HTML file and use mock API responses to check pagination, CSV downloads, empty results, errors, rate limits, cancellation, and mobile layout. They do not authenticate to a live customer site.
so4t_community_members.py, so4t_api_v3.py, and so4t_request_validate.py are retained for historical reference. They are not needed to run the HTML version. The maintained workflow is the HTML page above.