Install
$ agentstack add skill-algolia-skills-algolia-crawler ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Algolia Crawler
Turn web pages into a RAG-optimized Algolia index with the Algolia Crawler, driven entirely by the Algolia CLI (algolia crawler …). The Crawler visits URLs, extracts content with a JavaScript recordExtractor, and writes Algolia records on a schedule — no scraping code to maintain.
The single most important idea: crawling for RAG is not the same as crawling for site search. A RAG record is a chunk of text that will be dropped into an LLM's context window in isolation. That changes how you shape every record (see [The RAG record mental model](#the-rag-record-mental-model)).
When to use this skill vs. the others
| Need | Skill | |------|-------| | Crawl/ingest web pages into an index (this workflow) | algolia-crawler | | Build the chatbot / agent / RAG app on top of the index | algobot-cli | | Raw record/settings/synonym/rule ops on an existing index | algolia-cli | | Read-only search, analytics, recommendations | algolia-mcp | | Frontend search UI (autocomplete, results, facets) | instantsearch |
Rule of thumb: if the user wants to get web content into Algolia, you're in the right skill. Once the index exists and they want to ask questions over it, hand off to algobot-cli.
The RAG record mental model
Each record is retrieved and shown to an LLM alone, without the surrounding page. So optimize for that:
- Small and single-topic. One idea, one fact, one Q&A per record — not a whole page. Granular records retrieve precisely and waste less of the context window.
- Self-contained. Every record carries the context needed to stand alone: the entity it's about, the page title, the section heading. The LLM won't see the rest of the page.
- Natural-language
content, even for structured data. This is the highest-leverage move. Don't store only{model: "X", score: 0.87}— also synthesize a sentence: "Model X scores 0.87 on relevance…". Both keyword and vector retrieval, and the LLM itself, want prose. - Structured attributes for filtering. Alongside
content, keep clean fields (category,type,date, numeric values) so retrieval can be scoped withfiltersand facets.
If you internalize only one thing from this skill, make it this list. Everything else is mechanics.
The workflow
Follow these steps in order. Full commands, config, and code live in the references — read them as you reach each step.
- Set up the CLI and credentials. Install the CLI and export your Crawler credentials (a Crawler user ID + API key, distinct from your app keys), plus an Algolia write API key for the target index and your App ID. See [cli.md](references/cli.md#setup-and-credentials).
- Inspect the page first — is it JavaScript-rendered? Many modern pages load their real content via XHR after load, so a naive crawl indexes empty shells. Detect this and enable rendering. See [javascript-rendering.md](references/javascript-rendering.md).
- Write a
recordExtractorthat emits RAG records following the mental model above — one record per unit, a prosecontentfield, structured attributes, and chunking for long prose. See [record-extractor.md](references/record-extractor.md). - Validate with
algolia crawler testBEFORE indexing. It runs your config against a live URL and returns the records it would create, without writing anything. Use it as your feedback loop — and as a DOM inspector to fix selectors against the real rendered markup. See [workflow.md](references/workflow.md#validate-before-you-index). - Apply index settings explicitly. Do not rely on
initialIndexSettingsto configure the index — in practice it frequently does not apply. SetsearchableAttributes,attributesForFaceting, etc. yourself withalgolia settings importafter the first crawl. See [rag-index-settings.md](references/rag-index-settings.md). - Reindex, then verify by searching the index (
algolia search) for a few realistic RAG questions before trusting it. - Schedule a recurring crawl so the index stays fresh as the source pages change.
Crawling a whole site or section (one URL → all its sub-pages)? The crawler discovers sub-pages via startUrls/sitemaps/discoveryPatterns — but the config must be shaped from all the page types it will hit, not just the start page. A config fitted to the landing page produces junk on the article/reference/blog templates it never saw. Discover the URL set, group it into templates, sample a representative page per template, and validate the extractor against each. See [site-crawls.md](references/site-crawls.md).
The complete, copy-adaptable end-to-end run (create → test → settings → reindex → verify) is in [workflow.md](references/workflow.md).
Two things that will bite you
These are the non-obvious failures. Both references cover them, but they're worth stating up front:
- JavaScript-rendered data. If the page shows
Loading…placeholders in its initial HTML, or the numbers/table appear only after load, you must enablerenderJavaScript. A crawl without it indexes nothing useful. ([javascript-rendering.md](references/javascript-rendering.md)) - Values hidden in attributes. Rendered pages often keep the real value in an attribute (e.g.
data-tip="Score: 79.8%") while the visible cell shows only a bar or a delta. Extract from the attribute, not the visible text. ([record-extractor.md](references/record-extractor.md#reading-values-from-attributes))
Driving it with the CLI
Everything runs through algolia crawler … (and algolia settings / algolia search for the index side). Full cheatsheet and the gotchas below are in [cli.md](references/cli.md).
algolia crawler create -F config.json # create (prints nothing on success)
algolia crawler test --url [-F cfg] # extract records WITHOUT indexing
algolia crawler reindex # start a crawl that writes records
algolia crawler get # inspect crawler + config/status
algolia crawler stats # crawl status summary
Two CLI realities to plan around (details in [cli.md](references/cli.md#gotchas)):
- Set
renderJavaScript: true(boolean). The CLI only accepts the boolean form; the object form ({ enabled, patterns, waitTime }) makesget/list/create -Ffail to parse. Booleantrueuses the default render wait, which is enough for most pages — confirm withcrawler test(empty values mean the page needs more render time). createprints nothing and there's no config-update or delete command. Aftercreate, recover the id fromalgolia crawler list(getneeds a UUID — it doesn't accept a name). Iflisterrors because another crawler in the account uses a non-booleanrenderJavaScript, there's no pure-CLI recovery — look the id up via the Crawler REST list endpoint (GET /1/crawlers?name=). To change a config, re-create; to delete, use the dashboard or RESTDELETE.
References
- [workflow.md](references/workflow.md) — the full end-to-end CLI run: config, test-before-index loop, settings, reindex, verify, schedule.
- [site-crawls.md](references/site-crawls.md) — crawling a whole site/section: discover sub-pages, group page templates, sample and validate each, cover them with a branching extractor or multiple actions.
- [record-extractor.md](references/record-extractor.md) — RAG record patterns, helpers, reading values from attributes, chunking long prose.
- [rag-index-settings.md](references/rag-index-settings.md) — index settings tuned for retrieval, NeuralSearch/vector, query-time filtering for RAG.
- [javascript-rendering.md](references/javascript-rendering.md) — detecting and handling JavaScript-rendered pages.
- [cli.md](references/cli.md) — setup, credentials, the
algolia crawlercommand cheatsheet, and the CLI gotchas in detail.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: algolia
- Source: algolia/skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.