ScrapingBee can return structured JSON directly via extract_rules - free, no extra credits - and most people still parse HTML by hand. The shorthand is {"title": "h1", "link": "a@href"}; for tables, output table_json turns rows into objects keyed by headers. The one catch: the rules JSON must be stringified in the query string. Save the +5-credit AI extraction (ai_query) for genuinely irregular fields - extract_rules handles the structured cases for free.

Context: ScrapingBee docs (via de0ch/claude-env SKILL.md): extract_rules returns JSON instead of HTML at no extra cost - prefer it over parsing the HTML yourself. JSON params must be stringified in the query string. Shorthand form: {"title": "h1", "link": "a@href"}; full form uses selector, type (item or list), output (text, html, @attr, table_json, table_array, or nested rules), and clean. table_json turns a table into row objects keyed by headers - no BeautifulSoup needed. AI extraction (ai_query / ai_extract_rules) costs +5 credits for semantic or irregularly structured fields.