# Data specs from A1 iterate run 17
## Spec 1 (ppfeeds): GeckoTerminal token info snapshot, forward only
- What: for every pool that enters the kit/mc5 feed (cap >= 150k at +60 s) and every u100/h100 pool older than 60 s with reserve >= 0.5 ETH, call https://api.geckoterminal.com/api/v2/networks/robinhood/tokens/<token>/info once at pool age 60-120 s and once at 1 h; store raw attributes: twitter_handle, websites, telegram_handle, discord_url, image_url (missing placeholder = none), description, gt_score, gt_score_details, holders.count, developer_address, developer_holding_percentage, launchpad_details.graduation_percentage, is_honeypot. Store fetch time.
- Why forward only: socials are often added days later, a backfill leaks the outcome; the age-60 s snapshot is what a live rule could see.
- Limit: free tier 429s above ~10 calls/min; keep to feed rows (about 100-300/day), back off 15 s on 429. No key, no paid service.
- Format: sqlite or jsonl next to kitenrich (/opt/sw/geckometa/), key pool+token+fetch_age_s.
- Test (me): at n>=150 rows with a matured outcome: x for twitter_handle present vs absent, gt_score tertiles, dev_holding > 5%; same split inside the ENSEMBLE6 cell; keep only if the spread is >= 0.5x in both halves. Kill otherwise.
## Spec 2 (ppfeeds): two creation-tx columns in kitenrich rows
- What: for the token's first Transfer-from-zero (mint) tx: deployer_nonce (tx.nonce of the sender), direct_deploy (tx.to is null), create_selector (first 4 bytes of input if tx.to is set), gas_price_wei.
- Source: eth_getLogs address=token topic0=Transfer topic1=0x0 over the first 100 blocks before the first pool event, then eth_getTransactionByHash (free rpcpool, 2 calls per pool).
- Test (me): mc5 cell n>=150 forward: nonce0 direct deploy vs rest. Evidence so far: cell (backtest 14 Sep-8 Oct) nonce0 direct 2.18 n=138 vs 0.93 n=30; factory-created 1.00 n=48 (no volume). Outside the cell no effect, so only a cell filter. Kill if nonce>0 mean > 1.3 at n>=40.
