I’m doing research that requires collecting the response bodies of gtm.js (Google Tag Manager) resources across crawled sites, ideally over multiple monthly crawls.
My filter is essentially:
SELECT date, page, url, response_body
FROM `httparchive.crawl.requests`
WHERE client = 'desktop'
AND is_root_page = TRUE
AND type = 'script'
AND CONTAINS_SUBSTR(url, 'gtm.js')
AND response_body IS NOT NULL
The challenge is cost. Because url isn’t a clustering column, the gtm.js filter can’t prune, so extracting bodies means scanning the (very large) response_body column across each crawl. Over a wide date range this becomes expensive.
I’ve been trying to find a cheaper route and have a couple of questions:
-
Is there a recommended pattern for extracting a narrow slice of
response_bodyacross many crawls cost-effectively? (e.g. clustering tips I might be missing, a sampled/summary table, or a materialization approach the community uses.) -
Raw HAR access: I understand the raw crawl data lives in
gs://httparchive(crawls/andcrawls_manifest/). I tried reading it with a billing project attached, but the bucket returns 403 on bothobjects.listandobjects.get. Is there a process to request read access to the raw crawl data for? If so, what’s the right way to apply, and are there expectations around cost (requester-pays) or usage?
Thanks very much for maintaining such a valuable dataset, any guidance on the most cost-appropriate approach would be really appreciated.