agentsclimarketplace

Airtable user scraping

Skill mickzijdel/airtable-utils/skills/airtable-user-scraping

Scrape user/collaborator access data from Airtable bases using the airtable-scrape-users utility. Use when the user wants to audit who has access to which Airtable bases and at what permission level.From its SKILL.md

Install
npx -y skills add mickzijdel/airtable-utils --skill airtable-user-scraping

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

4.5 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it

Airtable User Scraper Skill

Purpose

This skill covers running airtable-scrape-users to extract user/collaborator data from Airtable bases grouped by workspace. Airtable's API does not expose collaborator data on the Team plan; this tool scrapes it from the web UI instead.

⚠️ Important: Acceptable Use Policy

This tool violates Airtable's Acceptable Use Policy. Always warn the user and obtain explicit acknowledgment before proceeding.

Prerequisites

Install Playwright's browser (first time only):

playwright install chromium
# Dependencies are handled automatically by uv on first run

Workflow

Step 1: Login (once per ~30 days)

Opens a browser for manual authentication. Auth cookies are saved to output/airtable_auth_state.json.

airtable-scrape-users --login

Re-run --login if scraping starts failing (cookies expire after ~30 days).

Step 2: Discover bases and save workspace config (once, or when bases change)

Fetches all accessible bases from the Airtable API and saves workspace groupings to output/airtable_scraper_config.json.

export AIRTABLE_API_KEY=patXXXXXXXXXX
airtable-scrape-users --from-api --save-config

Tip: Place a .env file in the directory you run the command from. It is loaded automatically.

# .env
AIRTABLE_API_KEY=patXXXXXXXXXX

If the project manages secrets with fnox (a fnox.toml in scope), wrap the command instead — required in non-interactive (agent) shells, where the fnox activate cd-hook doesn't fire:

fnox exec -- airtable-scrape-users --from-api --save-config

Agents: never read .env (no cat, head, grep, or the Read tool) — it contains secret values and access is typically deny-listed. Don't pre-check that credentials exist. Just run the command: it loads .env automatically and errors clearly if AIRTABLE_API_KEY is missing. React to that error — the message suggests fnox exec only when fnox is installed; retry with that if a fnox.toml is in scope, otherwise relay the error to the user.

Step 3: Scrape user data

Uses the saved config. Shows changes compared to the previous run.

airtable-scrape-users

Common Options

# Filter to specific workspace(s) by name or ID
airtable-scrape-users --workspace "Operations"
airtable-scrape-users --workspace "Operations" "Research"

# Scrape specific base IDs only
airtable-scrape-users --bases appXXXXXXXXXX appYYYYYYYYYY

# Export CSVs from the latest JSON without re-scraping
airtable-scrape-users --export-csv-from-json

# Export CSVs from a specific JSON file
airtable-scrape-users --export-csv-from-json output/airtable_users_export.20260123_114935.json

# Skip change comparison
airtable-scrape-users --no-compare

# Slow down requests (default: 1.0 second between bases)
airtable-scrape-users --delay 2

# Debug: show browser and save diagnostic HTML
airtable-scrape-users --no-headless --debug

Output Files

All output is written to output/ in the current working directory:

FileContents
airtable_auth_state.jsonBrowser cookies — gitignored
airtable_scraper_config.jsonWorkspace/base mapping
airtable_users_export.jsonLatest results
airtable_users_export.YYYYMMDD_HHMMSS.jsonBackup of previous run
{Workspace}_users.csvOne row per user, columns = bases, values = permission level
{Workspace}_bases.csvOne row per base, columns = users, values = permission level

Permission Levels

  • owner — Full admin
  • create — Create/edit records
  • edit — Edit records only
  • comment — Comment only
  • read — Read-only

Service accounts (AI, Automations, Table Sync) are automatically excluded.

Console Output

Each run prints:

  • Per-base progress and user counts
  • Change detection: users added/removed, permission changes since last run
  • Workspace summary with unique user counts

JSON Structure

{
  "scrape_time": "2026-01-23T...",
  "total_bases": 17,
  "workspace_summary": {
    "wspXXXXXXXXXXX": {
      "workspace_name": "Operations",
      "base_count": 12,
      "unique_user_count": 9,
      "users": [...]
    }
  },
  "bases": [...]
}

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Gives 0 of the 12 instructions most scraping extraction skills give in ~1.1k tokens

Counted across 109 of the 148 authors here whose files we hold, read 2026-09-06

  • Add delays between requestsin 7 of 109, across 6 files
  • Close the browser when finishedin 6 of 109, across 4 files
  • Authenticate every request with the x-api-key headerin 5 of 109, across 2 files
  • Default to Scraper APIs when one existsin 5 of 109, across 2 files
  • Map site structure before a full crawlin 5 of 109, across 3 files
  • Use the Web Scraping API for arbitrary URLsin 4 of 109, across 1 file
  • Treat data as valid only if requestMetadata.status is okin 4 of 109, across 1 file
  • Set client timeout to at least 300 secondsin 4 of 109, across 1 file
  • Retry only 429 and 5xx with exponential backoffin 4 of 109, across 1 file
  • Cap concurrency at your plan limitin 4 of 109, across 1 file
  • Persist the async job id immediatelyin 4 of 109, across 1 file
  • Poll job status every 10 to 30 secondsin 4 of 109, across 1 file

Said here and by no other author read

  • warn the user and obtain explicit acknowledgment before scraping
  • authenticate once with --login
  • re-run --login when scraping starts failing
  • save workspace config with --from-api --save-config
  • run the command without pre-checking credentials
  • wrap the command with fnox exec when fnox is installed

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.