# Multi-Bank Key/Account Audit Pattern When you need a full inventory of ALL API keys and accounts across every farm, use this script pattern. Scans all known bank files (JSONL/JSON/CSV), extracts key counts and status distributions, and outputs structured JSON. ## Script Template ```python import json, os, glob, csv from collections import Counter R = {} def jl(p): """Load JSONL file, return list of dicts or None.""" try: return [json.loads(l) for l in open(p, encoding='utf-8', errors='replace') if l.strip()] except Exception: return None def stat(name, rows, keyf='api_key'): """Count rows, keys, and status distribution.""" if rows is None: R[name] = 'NO FILE' return withk = [r for r in rows if r.get(keyf)] st = Counter(r.get('status', '?') for r in rows) R[name] = {'total': len(rows), 'with_key': len(withk), 'status': dict(st.most_common(5))} # Known bank paths — update this dict as new farms are added banks = { 'miarouter': 'Desktop/farm/miarouter/accounts.jsonl', 'codex_relay': 'tmp/codex_relay/accounts.jsonl', 'llmsrelay': 'tmp/llmsrelay_farm/accounts.jsonl', 'tookenclub_live': 'tmp/tookenclub_live.jsonl', 'seekai': 'tmp/seekai_farm/seekai_accounts.jsonl', 'conol': 'Desktop/_PROJECTS/conol_autoreg/accounts.jsonl', 'notion': 'tmp/notion_autoreg/farm_accounts.jsonl', 'vani': 'tmp/vani_autoreg/vani_accounts.jsonl', 'cleanapis': 'tmp/freeapi_3pack/cleanapis_accounts.jsonl', 'terrapolis': 'tmp/freeapi_3pack/terrapolis_accounts.jsonl', 'kiro_bid': 'tmp/aws_kiro/bid_accounts.jsonl', 'miarouter_verified': 'Desktop/farm/miarouter/verified.jsonl', } for name, p in banks.items(): if os.path.exists(p): rows = jl(p) kf = 'token' if 'tokens' in name else 'api_key' stat(name, rows, kf) else: R[name] = 'NO FILE' # CSV banks: count rows csv_banks = { 'MASTER_NEWAPI_KEYS': 'tmp/MASTER_NEWAPI_KEYS.csv', 'ALL_LIVE_KEYS_FINAL': 'tmp/ALL_LIVE_KEYS_FINAL.csv', 'POOL_FINAL2': 'tmp/free_newapi_reg/POOL_FINAL2.csv', } for name, p in csv_banks.items(): try: with open(p, encoding='utf-8', errors='replace') as f: n = sum(1 for _ in f) - 1 # minus header R[name] = {'rows': n} except Exception: R[name] = 'ERR' print(json.dumps(R, indent=1, ensure_ascii=False)) ``` ## Common Key Field Variance Different farms use different key field names: - `api_key` — most common (miarouter, codex, conol, cleanapis) - `token` — token-only banks (codex_tokens) - `key` — raw key field (some gateways) - No key field — email-only/registration-only banks (omnirush, gname) ## Status Codes by Farm - `full` — account registered, key extracted, smoke tested - `reg_fail` / `reg_ok_login_fail` — partial progress, retry possible - `signup_fail` / `login_fail` — blocked at auth stage - `no_code` / `no_key` — registration succeeded but key extraction failed