System Atlas

systatlas CLI

Search, read maps a level at a time, aggregate, rank, diff, export and upload from a shell.

systatlas is a small command-line client for the REST API: one file, Node 18 or later, no dependencies. It prints compact tables for people and, with --json, exactly what the API returned, for agents. Long reads follow next_cursor on their own (see Working with large data).

Install and sign in

npx systatlas --help
# or
npm install -g systatlas

systatlas login            # paste a key from /settings
export SYSTATLAS_API_KEY=sa_…   # or use the environment

login checks the key against the API and saves it to ~/.config/systatlas/config.json (mode 600). It is only ever printed masked. Public reads work without a key; workspace reads, uploads and contributions need one. --url or SYSTATLAS_URL point it at another server.

Read the registry

systatlas search "payroll" --industry staffing
systatlas org instawork-0a1b2c3d                       # parts with counts and coverage
systatlas org instawork-0a1b2c3d --node part:money     # one part's primitives
systatlas org instawork-0a1b2c3d --node prim:payroll --depth 2 --fields values,sources
systatlas org client --workspace acme-builders         # a company of your workspace
systatlas industries                                   # sectors, with organizations under each
systatlas industries --parent construction             # one level down
systatlas industry staffing --node part:work           # a schema, parts first

Identifiers, connections and sources

Wherever a ref goes, an identifier from open data works too: wikidata:Q95, lei:…, ror:…, cik:…, ein:…, domain:stripe.com.

systatlas org lei:529900Y25S8NZIYTT924                 # find it by its LEI
systatlas lookup lei:529900Y25S8NZIYTT924 wikidata:Q95 domain:stripe.com
systatlas links blackrock-dbd3ed17                       # funded by, funds, parents, subsidiaries
systatlas sources instawork-0a1b2c3d                     # what its facts rest on (needs a key)

Ask analytical questions

systatlas aggregate --by region --industry staffing
systatlas aggregate --by primitive --industry staffing --metric entropy
systatlas aggregate --metric revenue                 # distribution
systatlas top --metric revenue --industry staffing --max 25   # published figures, with year and source
systatlas top --metric employees --strict                     # reported figures only
systatlas diff instawork-0a1b2c3d gigsmart-4e5f6a7b
systatlas coverage --industry staffing
systatlas coverage --org instawork-0a1b2c3d

With a key

systatlas workspace acme-builders --max 500         # gaps, then the companies, paged
systatlas listings --part software --sort parts     # open marketplace listings

Export

export walks every matching organization with keyset cursors and streams one JSON object per line, or CSV with --csv. It never loads the whole result in memory.

systatlas export --industry staffing --csv > staffing.csv
systatlas export --kind nonprofit --max 1000 | jq -r .ref

Upload and contribute

upload sends components, flows or notes from a JSON array or a CSV file to your workspace, 200 per call. In CSV, columns are item fields; value:<parameter> columns become values and source_url, source_title the source.

# components.csv
# clientId,label,layer,primitive,value:frequency,source_title
# tool/gusto,Payroll in Gusto,software,payroll,Monthly,finance/README.md
systatlas upload acme-builders components.csv
systatlas upload acme-builders flows.json --kind flows
systatlas contribute rival-co-1a2b3c4d findings.json

For agents

  • --json prints each API response as one line of JSON (one per page; export prints one per organization). Each has tokens, hint and, when more is left, next_cursor.
  • Every list takes the same paging flags: --limit rows per request, --max rows in all, --all to follow every cursor, --cursor to continue where a page stopped. --view full or --view v1 pick the response shape.
  • Errors go to stderr with the API's code and a line on what to do next (log in, narrow the request, check the ref). The exit status is 1 for API and network errors and 2 for a mistyped command or flag.
Same rules as the API
The CLI only calls /api/v1. What a key can see, the rate limit on uploads and the tiers on every value are the API's.