View all results
Ferret

Declarative data extraction v2 alpha

Extract with intent

Ferret is an open-source query language (FQL) and runtime for structured data extraction from web pages, APIs, databases, and files.

FQL

One language from source to result

Describe the data, run it against the right runtime, and get structured results back — the program doesn't change when the source does.

Describe in FQL

Define the data you need, the conditions to wait for, and the shape to return.

Run it anywhere

Execute the same program against static documents, rendered pages, APIs, or host values.

Get structured output

Predictable objects and arrays, ready for scripts, tests, services, or jobs.

Move between tools

Playground, CLI, Go embedding, Worker, or Lab. Same language, no rewrite.

Why Ferret

Data automation without custom glue

Ferret is for developers who need repeatable data programs that move from local experiments to production without rewriting the logic for each runtime.

Declarative data logic

Describe what data you need, when it is ready, how to transform it, and which shape to return.

Capability-based execution

The same program can query a rendered page, an API response, a database row, or a file. FQL adapts to what each value can do.

Embeddable Go runtime

Run FQL inside your own application. Expose your own modules and functions, and control what scripts can access.

Core plus optional modules

The core runtime stays small. Modules add browsers, documents, databases, protocols, and other integrations when you need them.

FAQ

Frequently asked questions

Why not just use Python or Playwright?

Python and Playwright are excellent general-purpose tools, while Ferret is focused on structured data extraction and repeatable automation.

Instead of writing browser-control code and data-shaping glue for every workflow, Ferret lets you describe the data you want and run that description through a dedicated runtime.

Use Python when you need full control. Use Ferret when the goal is structured extraction, repeatable automation, and a workflow that should stay readable over time.

Why not ask AI to write a scraper?

For a one-time task, that may be enough.

Ferret is useful when the result needs to become more than a disposable script: something you can review, run again, embed in another application, test, debug, and maintain.

AI can help write extraction logic. Ferret gives that logic a smaller, more predictable shape and a runtime designed specifically for structured data workflows.

Is Ferret production-ready?

Ferret v2 is currently in alpha, so the language, tools, and module ecosystem are still evolving.

It is ready for experimentation, feedback, prototypes, internal tools, and early integration work. For production use, expect changes and pin versions carefully.

Ferret v1 is the previous stable line and may still be suitable for existing projects that already depend on it. New projects should start with Ferret v2, since that is where active language, runtime, and ecosystem development is happening.

Is Ferret only for web scraping?

No. Ferret is designed for any structured data workflow that benefits from a declarative description and a dedicated execution environment.

Web scraping is a common use case, but Ferret can also work with APIs, databases, files, or any values your own application exposes to it.

How does Ferret compare to other data extraction tools?

Most extraction tools are libraries inside a general-purpose language, or hosted point-and-click services. Ferret is a small language plus a runtime.

That difference is the point: the same FQL program can run in the playground, from the CLI, inside a Go application, or on a self-hosted Worker without being rewritten. Waiting, timeouts, and error behavior are part of the language rather than glue code around it.

If you need arbitrary logic around your extraction, a general-purpose language is a better fit. If the extraction itself is the product, Ferret keeps it declarative, testable, and portable.

Can I embed Ferret in my own application?

Yes. Ferret is designed to be embedded in Go applications, and there are also options for remote execution through the self-hosted Worker service.

This allows you to integrate Ferret’s capabilities into your own applications, jobs, or internal tools while maintaining control over execution boundaries and host-provided modules.

That means the same language can be used for local scripts, automation workers, browser-based experiments, and application-specific data workflows.

Embedding is useful when you want users, teams, or internal tools to describe data extraction logic without hard-coding every workflow directly into the host application.

Is there any tooling for Ferret?

Yes. Ferret includes a CLI for running, formatting, validating, and debugging FQL programs.

Tooling is an active focus of Ferret v2. The current direction includes better diagnostics, an interactive debugger, and editor integration through a language server, so Ferret can feel comfortable both in the terminal and inside an IDE.