Install
openclaw skills install @tonywangcn/web-utilities-researchGeneral-purpose web-intelligence utilities via the Crawlora API — scrape any URL to clean markdown/HTML, extract schema-conforming JSON from a page, fingerprint a site's tech stack, geocode addresses, compare cost of living between cities/countries (Numbeo), look up a company's import/export trade records (ImportYeti), check a domain's traffic (SimilarWeb), or resolve a brand's identity from its domain. Use for one-off utility lookups that don't fit a specific platform skill.
openclaw skills install @tonywangcn/web-utilities-researchA grab-bag of general-purpose lookups that don't belong to one platform: raw URL scraping/extraction, tech-stack fingerprinting, geocoding, cost-of- living comparisons, import/export trade records, site traffic, and brand resolution — all as normalized JSON from the Crawlora API.
export CRAWLORA_API_KEY=sk_your_key_herex-api-key: $CRAWLORA_API_KEY against
https://api.crawlora.net/api/v1. Missing/invalid key → 401.POST) — POST /web/scrape returns a
URL as markdown/HTML/links/metadata ({"url": "...", "formats": ["markdown"]});
POST /extract returns JSON conforming to a schema you supply
({"url": "...", "schema": {...}}); POST /web/techstack fingerprints
the technologies a site runs ({"url": "..."}). All three take flat
top-level fields — despite the tool catalog naming the body
scrapeOption/extractOption/request, that name is not a JSON
wrapper key; pass the fields directly at the top level of the body./geocoding/search (q or structured street/city/
country) for forward geocoding; /geocoding/reverse (lat+lon)
for reverse; /geocoding/lookup (osm_ids) for a known OpenStreetMap id./numbeo/cost-of-living/city/{slug} or
/country for one place's full price breakdown;
/numbeo/cost-of-living/rankings for a ranked list;
/numbeo/indices/* for quality-of-life-style indices (pass an index name)./importyeti/search (q) to find a company, then
/importyeti/company (slug) for its US customs import/export record summary./similarweb/web/{domain} for a site's traffic
overview; /similarweb/search (q) to resolve a name to a domain./brand/retrieve (domain) resolves a domain to brand
metadata (name, logo, colors).Full endpoint list, methods, and params: reference/endpoints.md.
# Scrape a URL to markdown (POST, flat body):
scripts/crawlora.sh -X POST /web/scrape '{"url":"https://example.com","formats":["markdown"]}' | jq '.'
# Tech-stack fingerprint:
scripts/crawlora.sh -X POST /web/techstack '{"url":"https://example.com"}' | jq '.'
# Geocoding:
scripts/crawlora.sh /geocoding/search q="1600 Amphitheatre Parkway, Mountain View, CA" | jq '.'
# Cost of living:
scripts/crawlora.sh /numbeo/cost-of-living/city/Lisbon | jq '.'
# Site traffic + brand:
scripts/crawlora.sh /similarweb/web/example.com | jq '.'
scripts/crawlora.sh /brand/retrieve domain=example.com | jq '.'
Raw curl fallback:
curl -fsS -H "x-api-key: $CRAWLORA_API_KEY" \
"https://api.crawlora.net/api/v1/geocoding/reverse?lat=37.4224&lon=-122.0842" | jq '.'
See reference/endpoints.md for the Web,
Geocoding, Numbeo, ImportYeti, SimilarWeb, and Brand endpoints this skill uses.
/web/scrape (content) + /web/techstack
(what it's built with) + /similarweb/web/{domain} (traffic) for a
competitor's website in one pass./numbeo/cost-of-living/city/{slug} for two
cities, diff rent/groceries/transport line items./importyeti/search for a brand, then
/importyeti/company for their shipment history and known suppliers.2xx; free tier 2,000 credits/mo.
Key at https://crawlora.net.CRAWLORA_API_KEY only — never hardcode, query-param, or commit it./web/scrape, /extract, and /web/techstack take flat top-level
fields, live-verified (url, formats for scrape; url, schema for
extract; url for techstack) — the tool catalog's scrapeOption/
extractOption/request names describe the body's purpose, not a
wrapper key to nest under. Less-common fields (render, only_main_content,
a full JSON Schema for /extract) aren't listed in the tool schema either —
confirm those at crawlora.net/docs
or the playground before relying on them.