Skip to content

CLI reference

View as Markdown

Find a command, choose its options, and try an example. Use analog view for a page captured by your agent’s browser or a saved result. Use analog browse when you need Analog to acquire a URL. Run analog <command> --help for detailed behavior and examples.

Find a command

View and inspect pages

Accounts and credentials

Installation and diagnostics

Saved results

Help and feedback

View a supplied page or return to a saved result. Bare view requests an overview; --find returns matching evidence directly. Repeat --find to ask independent questions about the same capture.

For supplied HTML, pass an explicit file path and the actual browser URL. Analog sends the HTML and URL for extraction, then saves the result locally. It does not fetch that URL, render the file, execute scripts, or interact with the page. --mode local converts to Markdown without hosted extraction. Supplying a file does not establish that it captures every part of the page.

A JSON file from analog browser capture-script includes its actual URL and visibility observations. view validates those observations before extraction. Omit --url; a conflicting URL is rejected. Invalid captures fail without fetching, extracting, or saving. Observed shadow/frame omissions remain qualified when the result is reopened.

Saved-result viewing and searching are local: no refresh or new extraction. The overview lists record sections and prose in page order. section[N] identifiers keep their record indices for operations such as analog export.

SOURCE is an explicit file path (./page.html, ./page.capture.json, or an absolute path), a saved handle, a friendly name, or latest. Prefix a bare filename with ./; its existence never changes how a saved name resolves.

After capturing through your browser tool:

Extract and search a browser capture

analog view ./about.capture.json --save-as about --find Frankie --find Marcus

The file supplies its URL. The result saves once and answers both searches.

After your browser saves the page as ./about.html:

Extract and search captured HTML

analog view ./about.html --url https://getanalog.io/about/ \
--save-as about --find Frankie --find Marcus

This saves once and answers both searches without an overview. Matches go to stdout; the saved handle and capture qualifications go to stderr.

Search the same result locally

analog view about --find Frankie

Use the returned handle instead of about when no friendly name was assigned.

Request the page overview

analog view latest

Use a specific handle or name to keep referring to the same capture while other pages are saved. Add --complete to list the overview’s hidden fields.

Save without viewing evidence

analog view ./about.html --url https://getanalog.io/about/ \
--save-as about --save-only

The name must be unused. This prints a receipt; it does not overwrite an existing result. Use a different name when capturing another version.

Read the saved page as Markdown

analog view about --markdown

The saved quotes page has an author field named text_2:

Search a record field

analog view quotes-before --find "Einstein|Austen" --field text_2 --regex --json

Search defaults to case-insensitive literal substrings across record values, page text, and page regions. --regex interprets each search as a regular expression. --field limits searches to that record field; unknown fields and invalid regular expressions are errors. Matching records retain their other fields. Text values and prose excerpts are bounded; JSON retains full values.

--json alone returns the full result. With one --find, it returns a match array, with _source identifying each match; no matches returns []. With multiple searches it returns queries and matches. Each query has its pattern and a list of zero-based matches indexes into the shared evidence array. Empty indexes mean no matches for that query in this capture. Shared evidence is emitted once; repeated identical source records remain distinct.

Choose either --markdown or --json. --find cannot accompany --markdown; --complete applies only to the overview. --save-only accepts no view/search option. Saved results do not accept file-ingestion options such as --url.

New captures save automatically. --save-as assigns a unique name in the same publication; a known collision is rejected before extraction. A later save or naming failure may still return current evidence, but exits with a failure status and reports that the result was not saved. Partial captures remain qualified when searched. No matches is a successful search, not proof of absence beyond the captured content.

Viewing or searching an existing saved result is a local operation: success returns 0, including when the saved capture is partial. Its limitations remain visible. Acquiring a new result from a supplied file still reports extraction or save failures with a failure status.

An unreadable save fails with recovery guidance based on its recorded source. For a supplied page, reuse the original capture or HTML file if available, or capture the intended browser state again. Example filenames in the error are placeholders: the result store retains neither the input file nor its path. For a browser-backed save, a fresh browse does not restore earlier browser state or capture settings. Unknown acquisition is identified as unknown; recovery never runs automatically.

The overview keeps coverage notes visible. Add the root --guidance before view to request an optional next action; it does not change the evidence.

All options: --url, --save-as, --save-only, --find, --field, --regex, --markdown, --json, --complete, --mode, --help.

  • --find — repeatable.
  • --mode — one of auto, structured, local.

For selecting and exporting records, see Working with results.

Use Analog’s built-in browser when your environment cannot supply a capture, or when you choose Analog to acquire the URL. It saves the page’s records, prose, and navigation. The default output is a receipt with the saved handle and material capture notes. Add --find TEXT to search the capture immediately, or search the saved result later. Request an overview when you need context.

Analog saves the result locally and gives it a handle. Use that handle to keep working with the same result, or fetch the URL again when you want a fresh view.

URL is the webpage to fetch. Analog renders JavaScript before reading the page. These examples assume you are signed in.

This run saved handle 20260913-zl65e4. Your run will have its own handle. The capture covers the first page; the notes qualify its content without printing the page overview.

Fetch a page of quotes

analog browse https://quotes.toscrape.com/js/
Output
Saved 20260913-zl65e4
Captured page 1; a next-page link is available.
A single-subject interpretation was withheld; some page facts could not be verified.

Include the next page

analog browse https://quotes.toscrape.com/js/ --pages 2

The receipt reports how many pages were captured and why pagination stopped. The requested count is a maximum; reaching the normal end earlier is still success.

Fetch and find a known value

analog browse https://getanalog.io/about/ --find "Frankie"

This fetches the page once, saves it, and searches that capture. Matching evidence goes to stdout; the saved handle and capture notes go to stderr. Use the printed handle for later searches without fetching again.

Search this invocation’s capture for a case-insensitive literal substring, using the same search scope and compact text display as analog view --find. Another process saving a newer result cannot change which capture is searched. No overview is required.

With --json, return an array of matching objects, including full matching records and their _source information. No matches returns []; text output describes the searched capture. A successful search is not proof that the value is absent from uncaptured content.

Cannot be combined with --markdown or --no-save. For regular expressions or field-specific searches, use analog view --find with the saved handle.

Returned partial results can still be searched; their capture notes and failure status remain. If saving fails, current matches can still be returned, but the command reports that the result was not saved and exits unsuccessfully. A failed acquisition never searches an older result. An interruption before a result is returned reports any confirmed partial handle and exits without search output.

Print the page as Markdown on stdout. The result is still saved; its receipt and material capture notes go to stderr.

Print the full result as JSON on stdout, or the matching objects when combined with --find. The receipt and capture notes go to stderr. Choose either --json or --markdown for a command.

Follow the site’s next-page links and combine up to this many pages. Pagination is experimental; see fetching multiple pages for its behavior and limitations.

Accepts integer; 1–50; default 1.

Choose structured records with or without a saved fit assessment, or local Markdown. See choose a fetch path.

Accepts one of auto, structured, local; default "auto".

Return data without saving it locally. Requires --json or --markdown; there will be no saved handle to reopen afterward. Cannot be combined with --find.

Put the root --guidance flag before browse to request one available next action. It does not change the capture, selected data, or failure status:

Command
analog --guidance browse https://quotes.toscrape.com/js/

For complete preview fields, request analog view <handle> --complete. Acquisition itself does not print a preview.

--find, --markdown, --json, --headed, --no-reveal-all, --load-all, --expand-all, --pages, --mode, --no-save, --allow-private, --help.

For browser controls, see fetching. Run analog browse --help for every option’s behavior.

Have a saved result? Continue with analog view.

Create an account and connect this terminal in the same step. Keep the terminal open while you enter your invite code and verify your email in the browser. No separate login is needed afterward.

CODE optionally pre-fills the invite code in the browser. Omit it to enter the code there. For the full flow, see Authenticate.

--help

Create your account

analog signup

Wait for the terminal to confirm that it is connected. The credential is stored locally and reused by the CLI, Python SDK, and MCP server.

Connect this terminal to an existing account, including one you just created on the website. By default, the command opens your browser for email verification and waits for the connection to complete.

With --no-browser, use a browser on another machine and return its one-time handoff to the waiting terminal’s hidden prompt. This mode needs an interactive terminal. See the authentication guide for the complete sequence.

--no-browser, --help.

Connect on this machine

analog login

Connect an interactive remote terminal

analog login --no-browser

Revoke this machine’s credential and clear its local store. The CLI, SDK, and MCP server using that credential lose access. This runs without a confirmation prompt; saved results remain on disk.

If revocation cannot be completed, the command still clears the local credential and prints a warning with a command to finish revoking the key. Local removal alone does not disable a copy held elsewhere. A backend mismatch refuses the operation without clearing the credential.

--help

Disconnect this machine

analog logout

Read any warning before treating the key as revoked. To reconnect later, use analog login.

Show whether a credential is stored and when it was saved. The default check is local: “Signed in” alone does not confirm that the backend still accepts the credential.

Add --verify to check it with the backend. The command reports connection state without printing your email or credential.

--verify / --no-verify, --help.

This example has a connected account. The storage timestamp is shown as <stored-at>:

Verify the stored credential

analog whoami --verify
Output
Signed in.
Stored at: <stored-at>
Storage: local file (owner-only)
Backend: accepted

Backend: accepted confirms the credential worked at the time of this check. A missing or rejected credential exits with code 3; an unreachable backend exits with code 4.

Report the stored connection, backend availability, and local saved-results store together. With a credential, this also checks whether the backend accepts it. Without one, it checks public backend health instead.

The results line reports the number of saves, their disk footprint, and the store’s size cap, or says that nothing is saved. This command does not fetch a webpage or change any saved results.

--help

This example has a connected account and an empty results store.

The home directory is shown as ~ in the output.

Inspect this installation

analog status
Output
Credential: configured
Storage: ~/.config/analog/credentials.json (owner-only file; readable by anything running as you — protection is revocation and origin-binding, not hiding bytes)
Backend: ok (schema 29, build 6c8db2a3)
Results: none saved

“None saved” describes the local results store; it does not mean the account is disconnected. Your backend build and store totals may differ.

Check the local credential, outbound access to Analog’s website, backend health, and availability of the built-in browser. Use this to diagnose the environment before retrying a command.

The credential check is local; it does not verify that the backend accepts the key. Use analog whoami --verify for that. A healthy report also does not guarantee that a particular website allows access.

--help

This example has a connected account and the browser already installed.

Check the environment

analog doctor
Output
Credential: configured (bound to https://api.getanalog.io)
Egress: ok — getanalog.io reachable
Backend: ok
Browser: installed
Everything Analog needs is available here.

A missing browser alone is not a failure: Analog can download it on first use. Read the individual checks and suggested remedies when something is unavailable.

Choose a reporting command: quality for a page that came out wrong, or request for something you want to do. Both submit to Analog using your connected account and return a receipt.

The Feedback guide explains what to report and what each submission includes.

--help

Find the reporting commands

analog feedback --help

Help lists the two subcommands without submitting feedback. Add --help after either subcommand to see its arguments and options.

Send a quality report about a page. URL must be a full HTTP(S) address. Supply at least one --reason; repeat the option when several labels independently describe the result. Each distinct label is sent once.

Use --note for a short explanation of what you expected and observed (up to 2,000 characters). Choose labels in the Feedback guide; start with Troubleshooting if the earliest symptom is unclear.

--reason, --note, --help

  • --reason — one of undetected_block, under_rendered, no_records_found, poor_field_naming, misfielded_values, page_chrome_in_records, over_extraction, under_extraction, wrong_content_extracted, garbled_markdown, other; required; repeatable.

Replace the example URL, reasons, and note before running this command:

Report an affected page

analog feedback quality https://example.com/page \
--reason under_rendered \
--reason poor_field_naming \
--note "the final products are missing; prices landed under text_3"

This sends the report to Analog. The confirmation names the URL and reasons, states that page content is not included, and prints a Receipt: ID. The report does not attach a saved result. See submission privacy.

Send TEXT to Analog as a feature request. Describe what you wanted to do and could not do. The text must be non-empty and is limited to 2,000 characters. Quote it so the shell passes it as one argument.

This requires a connected account. Feature requests carry no page URL or reason labels; see Feedback for the reporting guide and privacy.

--help

Replace the placeholder with the request you want to submit:

Send your request

analog feedback request "<your-request>"

The CLI confirms Request received., prints a Receipt: ID, and thanks you. The ID identifies the submission; it is not a URL or a report-reading endpoint.

Choose a key command: list to see every key on the connected account, or revoke to disable one by its prefix. Both use the credential this terminal is connected with.

Authenticate explains where the credential is stored and what a revoked key can no longer do.

--help

Find the key commands

analog keys --help

Help lists the two subcommands without reading or changing any key. Add --help after either subcommand to see its arguments and options.

List the keys for the connected account, including revoked keys. Each row shows a prefix, label, creation date, and whether it is active or revoked. The current terminal’s key is marked in the list.

This requires a working credential. It reads key metadata without printing full key values or changing access.

--help

Find a key to revoke

analog keys list

Match the label and prefix to the key you intend to disable. Pass its prefix to analog keys revoke.

Revoke the key identified by PREFIX from analog keys list. This disables every copy of that key, wherever it is used, without a confirmation prompt. Other keys for the account remain active.

Revoking the current terminal’s key disconnects it. Use analog logout when you also want to clear the local credential store on this machine.

--help

Disable a selected key

analog keys revoke <prefix>

Replace <prefix> with the prefix from the list. Revoking an already revoked key reports that state; it does not reactivate it. Connect again with analog login if you revoked this terminal’s key.

Check a page’s approximate Markdown size, available sources, and suggested reading mode before choosing how to view it. The check runs locally, requires no account, and makes no backend call. It does not create a saved result.

The recommendation is advice; your task determines whether to use records, local Markdown, or another source the page reports. See Assess a page for a complete response and next commands.

URL is an HTTP(S) webpage address, not a saved handle, friendly name, or latest. To inspect a saved result, use analog view or analog describe.

Assess the quotes page

analog assess https://quotes.toscrape.com/js/

Read the captured assessment to see how the recommendation and pagination note inform different decisions.

Render the page again

analog assess https://quotes.toscrape.com/js/ --fresh

Use this when you want a current assessment instead of one from a recent saved result.

Skip additional source checks

analog assess https://quotes.toscrape.com/js/ --no-probe

This can still fetch the page. Combine it with --fresh to render again while skipping the extra feed and sitemap checks.

By default, a stored assessment from a result saved for the same URL within the last 15 minutes is reused. The response names the saved result and its age. Feed and sitemap checks run again unless --no-probe is set.

When changing expansion options, include --fresh to apply them to a new render rather than reusing the stored assessment.

Fetch and render the page even when a recent saved assessment is available.

Skip the platform-feed check and the robots.txt sitemap listing. Sitemaps themselves are never fetched by this command. Feeds and navigation declared in the rendered page remain available. This does not disable the page fetch or its robots.txt enforcement.

Keep the page’s default view instead of activating a control such as “All” or “Clear filters” before assessing it.

Request repeated “Load more” or “Show more” clicks before the assessment. Off by default.

Request expansion of per-item disclosures, such as accordion rows, before the assessment. Off by default. Fetching explains these expansion controls and their limits.

Allow private, loopback, and link-local URLs, which are refused by default. Use this only for your own intranet or local development server.

All options: --no-reveal-all, --load-all, --expand-all, --no-probe, --allow-private, --fresh, --help.

Choose a browser command: capture-script writes a helper that captures the page your harness’s browser is showing, and install downloads Analog’s built-in browser before analog browse needs it. Neither command connects an account or fetches a page.

Fetching covers capturing from a supplied browser, and Install covers the built-in browser.

--help

Find the browser commands

analog browser --help

Help lists the two subcommands without downloading a browser or writing a file. Add --help after either subcommand to see its arguments and options.

Write a reusable capture helper for a harness’s browser tool. The command prints the helper’s absolute path; it does not connect to a browser or fetch a page. Import the generated ES module inside a runtime with supported browser evaluation and Node filesystem access.

The helper captures the current page without scrolling, clicking, or changing it. It writes a capture JSON file and returns a small receipt. See the browser handoff recipe for the import, capture, and view steps.

--output, --help

  • --output — file path; required.

Choose a new .mjs destination:

Prepare the helper once

analog browser capture-script --output ./analog_capture.mjs

Import the returned absolute path in your browser tool’s JavaScript runtime. The module is self-contained: it needs no neighboring files or npm packages. Existing files and symlinks are refused. Run the command again with a new destination when you want the helper from a newer SDK.

After the helper writes ./about.capture.json:

View the captured page

analog view ./about.capture.json --save-as about --find Frankie

The capture supplies its actual URL. view validates the capture before extraction; observed shadow/frame omissions remain qualified in saved results. Structured viewing sends page content and its URL to Analog. --mode local converts to Markdown without sending either.

Download Analog’s built-in Chromium before using analog browse. Download size varies by platform and browser version. Matching installed browser binaries are reused.

Analog also downloads it automatically when needed. Preinstall it when you want that download finished before a demo or an automated run. See Install for the full setup.

--help

Prepare the browser

analog browser install

The command returns when the browser is ready. This does not connect an account or fetch a webpage.

Update this copy of Analog through the channel that installed it. Homebrew, uv tool, and pipx installations run their own upgrade command. For a pip-managed environment, Analog prints the command for you or your environment manager to run deliberately.

Use --print to inspect the proposed command without running it, whichever channel installed Analog.

--print, --help.

Inspect the upgrade command

analog update --print

Update this installation

analog update

An upgrade can change the installed SDK version. For a project-managed environment, update its declared dependency through the project’s normal workflow. See Install for supported installation routes.

List saved results, newest first. Each row shows its handle, friendly name when one is assigned, record count, age, and source URL. Use the handle or name with analog view to return to that result.

The summary shows the local store’s disk footprint and size cap. Results saved during an interrupted or unfinished fetch are marked [partial].

This command reads the local store without fetching any pages. If the store is empty, it tells you how to save your first result.

Find a saved handle

analog history

Look for the source URL of the page you want to reopen. The results guide shows how to save the quotes page as quotes-before, the name used in the inspection examples below.

Inspect storage and fetch settings

analog history --usage --verbose

Read history in a script

analog history --json

Add each result’s size on disk to its row.

Show the fetch settings and raw root <html lang> observations recorded with each result. Each observation names its capture URL, in retained page or batch order. These declarations are not inferred or verified languages and do not change browsing or extraction. unrecorded means there was no observation; absent means the browser observed no attribute; "" means an observed empty attribute. Other values are quoted without normalization. Older saves remain unrecorded and can also report unknown settings.

Print an array of entries with handle, url, saved_at, name, sections, records, and partial, newest first. An empty store returns []. This flag cannot be combined with --usage or --verbose.

All options: --usage, -v / --verbose, --json, --help.

For naming, storage limits, and cleanup, see Manage saved results.

Inspect each record section’s fields, coverage, distinct-value counts, and samples. Use the reported field names when writing a search or export.

The examples use the saved quotes page, named quotes-before. Its quotes are in section[0]: text holds the quote, text_2 holds the author, and tags holds its topics. Check your result’s field names if the page has changed.

REF is a saved handle, a friendly name, or latest. The command reads the saved result locally; it does not fetch the page again.

Inspect the page’s fields

analog describe quotes-before

Focus on the quotes section

analog describe quotes-before --section 0

Read field statistics as JSON

analog describe quotes-before --section 0 --format json

This returns field statistics and section metadata. To read the records themselves, use analog export.

Keep context with the statistics

analog describe quotes-before --section 0 --format json --context compact

This wraps the statistics in one object with source, selection, qualifications, and data, using the same context format as analog export --context compact. The ordinary JSON array is under data; an empty array still carries the available source and qualifications. No page Markdown is included. Use --context full to keep this object and add the original saved artifact under context, including records, section relationships, schemas, and Markdown. The selected statistics stay identical; the original source can include unselected sections.

Coverage is the fraction of records with a non-null value in the field. Cardinality counts distinct non-null values. For a list field, cardinality compares complete lists; analog distinct counts their individual items.

The table also reports each field’s type, source, traits, and a sample. Samples marked …* were shortened for display; the saved values remain available in full.

Statistics describe captured records, not necessarily the whole site. Applicable capture limitations accompany ordinary output on stderr; with compact or full context, they are included in the JSON instead. A successful local inspection returns success even if acquisition of the saved page was partial.

one of rich, markdown, plain, json; default "rich".

Choose a terminal table, a Markdown table, plain text, or JSON. JSON returns an array of selected sections with their field statistics; a result with no record sections returns [].

Select a heading label, a zero-based section number, a printed ID such as section[0], or all. A repeated heading label selects every matching section. By default, all record sections are described.

Limit the selection to a kind, such as navigation. Use this instead of --section; the two flags cannot be combined.

one of none, compact, full; default "none".

  • none (default): the statistics array.
  • compact: the same statistics under data, with source, selection, and qualifications.
  • full: the compact object plus the original saved artifact under context.

The compact and full levels require --format json. Full context describes what was saved; it does not certify that the capture was complete. none leaves other formats unchanged.

All options: --format / -f, --section, --kind, --context, --help.

See Inspect and find for the workflow from field inspection to a targeted query.

List a field’s distinct values with their occurrence counts, most frequent first. For a list field such as tags, each item is counted separately. Null values are skipped.

The examples use the saved quotes page, named quotes-before. They select its quotes in section[0], where tags contains topics and text_2 contains author names.

REF is a saved handle, a friendly name, or latest. FIELD is a field name reported by analog describe. This command reads the saved records locally.

Count occurrences of each topic

analog distinct quotes-before tags --section 0

Count different authors

analog distinct quotes-before text_2 --section 0 --count

An author appearing in several quotes contributes one distinct value.

Read topic counts as JSON

analog distinct quotes-before tags --section 0 --json

Select a heading label, a zero-based section number, a printed ID such as section[0], or all. A repeated heading label selects every matching section. By default, the command checks all sections containing the field.

Limit the selection to a kind, such as navigation. Use this instead of --section; the two flags cannot be combined.

Return the number of distinct values instead of their frequency list. This counts unique values, not records or total occurrences.

If the same field spans sections with different record shapes, the value list requires a narrower selection. --count can combine those sections, but prints a warning to stderr: using one field as an identity across unlike records can conflate different things. Choose --section or --kind when those values should be counted separately.

Print an array of objects with value and count, most frequent first. With --count, print the distinct count as a JSON number instead. If the field has no values, these return [] and 0, respectively. An unknown field is an error.

All options: --section, --kind, --json, --count / -c, --help.

For inspecting fields before choosing a query, see Inspect and find.

Compare two saved results section by section. The report shows record turnover, added or removed sections and fields, record counts, and changes in field statistics. The comparison reads both saves locally; it does not fetch either page again or modify the saved results.

REF_A is the earlier result and REF_B is the later one. Each accepts a saved handle, a friendly name, or latest. You can also compare two different pages; the command does not require matching URLs.

The examples begin with the saved quotes page, named quotes-before. Keep that name before fetching again so the new save does not change which earlier result you are comparing.

Your saved handles and page content may differ.

Save a second view of the page

analog browse https://quotes.toscrape.com/js/
analog rename latest quotes-after

Use a different name if quotes-after is already taken. This fetch creates the second save; the commands below only read the two saves.

Compare the saved pages

analog diff quotes-before quotes-after
Output
diff 20260911-u5rbhk -> 20260911-dlmnwx
sections: 3 -> 3
records: 14 -> 14
No differences in sections, schema, counts, or field stats.

These saves contain the same ten quotes and four navigation links, so the report shows no differences. A successful comparison exits with code 0 whether differences exist or not.

Compare only the quotes

analog diff quotes-before quotes-after --section 0
Output
diff 20260911-u5rbhk -> 20260911-dlmnwx
records: 10 -> 10
fields: 3 -> 3 (+0 -0)
No differences in record content, schema, counts, or field stats.

The quotes are in section[0] in both example saves. Check both results with analog describe before using a numbered section if the page’s layout has changed.

Arrived records occur only in the later save; departed records occur only in the earlier one. Records are compared by their complete values. A record with any changed value counts as one departure and one arrival, rather than a field-by-field edit to a matched record. Duplicate occurrences count separately; changing only the order of records does not count as turnover.

Sections are matched by heading label, then by kind in page order. The report includes added or removed fields and changes in their types, sources, traits, coverage, and distinct-value counts. See analog describe for the field statistics.

This is a comparison of record sections. It does not compare page prose, images, or visual layout. Read notes about different fetch settings, SDK schema versions, or saved field renames before treating a difference as a change on the website.

Apply the same selector to each save: a heading label, a zero-based section number, a printed ID such as section[0], or all. A repeated heading label selects every matching section. A number selects that position independently in each result, so inspect both saves when sections move.

If the selector matches only one save, those sections appear as added or removed. No matching section on either side is a command error.

Compare only sections of a kind, such as navigation. Use this instead of --section; the two flags cannot be combined. Without either option, the comparison includes all record sections.

All options: --section, --kind, --help.

For saving and comparing a page over time, see Compare two saves.

Read a saved result as JSON, CSV, YAML, or Markdown. Select the records, fields, and rows you need without fetching the page again or changing the saved data.

The examples use the saved quotes page, named quotes-before. Its quotes are in section[0]: text holds the quote, text_2 holds the author, and tags holds its topics. Check analog describe for your result’s names and sections.

REF is a saved handle, a friendly name, or latest. Output goes to stdout unless you supply --output.

Command and output
analog export quotes-before -f csv --section 0 \
--output quotes.csv
Output
Wrote csv to quotes.csv
View quotes.csv
Command and output
cat quotes.csv
Output
tags,text,text_2
change; deep-thoughts; thinking; world,“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”,by Albert Einstein
abilities; choices,"“It is our choices, Harry, that show what we truly are, far more than our abilities.”",by J.K. Rowling
inspirational; life; live; miracle; miracles,“There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”,by Albert Einstein
aliteracy; books; classic; humor,"“The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”",by Jane Austen
be-yourself; inspirational,"“Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.”",by Marilyn Monroe
adulthood; success; value,“Try not to become a man of success. Rather become a man of value.”,by Albert Einstein
life; love,“It is better to be hated for what you are than to be loved for what you are not.”,by André Gide
edison; failure; inspirational; paraphrased,"“I have not failed. I've just found 10,000 ways that won't work.”",by Thomas A. Edison
misattributed-eleanor-roosevelt,“A woman is like a tea bag; you never know how strong it is until it's in hot water.”,by Eleanor Roosevelt
humor; obvious; simile,"“A day without sunshine is like, you know, night.”",by Steve Martin

The file contains the quotes section’s records, without navigation links.

Select two quotes by Einstein

analog export quotes-before --section 0 \
--fields text_2,text --where "text_2~Einstein" \
--sort text --limit 2
Output
[
{
"text_2": "by Albert Einstein",
"text": "“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”"
},
{
"text_2": "by Albert Einstein",
"text": "“There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”"
}
]

This prints a JSON array of records with author and quote fields, sorted by quote text. Filtering and sorting can use fields you do not export.

Find authors of inspirational quotes

analog export quotes-before --section 0 \
--fields text_2 --where "tags=inspirational" \
--sort text_2 --desc
Output
[
{
"text_2": "by Thomas A. Edison"
},
{
"text_2": "by Marilyn Monroe"
},
{
"text_2": "by Albert Einstein"
}
]

For the list-valued tags field, = matches an exact item. This returns one author value per matching quote; use distinct when you want unique values and their counts.

Keep full context with selected records

analog export quotes-before --section 0 --context full --output quotes.json
Output
Wrote json to quotes.json

The selected records are under data. Full context includes everything in compact context, then adds the original saved result under context: all saved sections, their relationships, field metadata, and page Markdown. That source material may include records and fields excluded from data. To inspect the original saved artifact on its own, use analog view quotes-before --json.

Hand selected records onward with context

analog export quotes-before --section 0 --fields text_2,text \
--context compact --output selected-quotes.json

This writes one JSON object with source, selection, qualifications, and data. It carries the selected records and the facts needed to interpret them without including page Markdown. Use it when another agent or a later session will read the file without the current transcript. The same option works on stdout; --output only changes the destination.

source identifies the saved page’s URL, local handle, and save time when known. Save time is not a freshness guarantee, and a handle is local to the result store. selection records the original section indices, any selected Collection, and applied fields, filters, sort order, and limit. Limits apply per section, or once to a selected Collection’s canonical records.

qualifications preserves relevant capture and interpretation facts, including caveats about fields used for filtering or sorting. Source counts and indices refer to the original selection, before row shaping. data contains the selected records; even an empty selection retains its context. The file can be read or processed directly; it is not a browser capture file for analog view or a result-store import.

--context full keeps this same object and adds the original source artifact under context. Choose it when the recipient also needs the surrounding page and field metadata. Both levels require JSON; neither changes the selected data. Full context means all saved source material, not a guarantee that the capture covers the entire page or site.

Read the quotes section as Markdown

analog export quotes-before -f md --section 0
Output
# [Quotes to Scrape](https://quotes.toscrape.com/)
[Login](https://quotes.toscrape.com/login)
“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”by Albert Einstein
Tags: change deep-thoughts thinking world
“It is our choices, Harry, that show what we truly are, far more than our abilities.”by J.K. Rowling
Tags: abilities choices
“There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”by Albert Einstein
Tags: inspirational life live miracle miracles
“The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”by Jane Austen
Tags: aliteracy books classic humor
“Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.”by Marilyn Monroe
Tags: be-yourself inspirational
“Try not to become a man of success. Rather become a man of value.”by Albert Einstein
Tags: adulthood success value
“It is better to be hated for what you are than to be loved for what you are not.”by André Gide
Tags: life love
“I have not failed. I've just found 10,000 ways that won't work.”by Thomas A. Edison
Tags: edison failure inspirational paraphrased
“A woman is like a tea bag; you never know how strong it is until it's in hot water.”by Eleanor Roosevelt
Tags: misattributed-eleanor-roosevelt
“A day without sunshine is like, you know, night.”by Steve Martin
Tags: humor obvious simile
- [Next →](https://quotes.toscrape.com/js/page/2/)

This reads the section’s Markdown. Omit --section to read the whole page.

one of json, csv, yaml, md, markdown; default "json".

markdown is an alias for md. CSV and YAML contain records. JSON defaults to a flat array of selected records (--context none), with or without selection flags. Use --context compact or --context full to add context.

Markdown supports section, kind, and collection selection. It does not accept --fields, --where, --sort, or --limit. If selected sections have no stored Markdown, the command reports the omission on stderr; if none can be shown, it falls back to the whole page and says so.

Choose one way to select records:

  • --section accepts a heading label, a zero-based section number, a printed ID such as section[0], or all. A repeated heading label selects every matching section.
  • --kind selects all sections of a kind, such as navigation.
  • --collection selects a collection by its displayed zero-based index. When your result reports Collection 0, --collection 0 exports its records with repeated identities represented once. For Markdown retains the collection’s member sections. All JSON context levels return the same canonical records; full context separately retains the original source and collection membership. The quotes example has no collections; use its section number.

These selectors cannot be combined. Without one, all record sections are in scope. CSV, YAML, and every JSON context level require sections whose record shapes can be combined. Select one section or collection when the page contains different kinds of records.

Keep comma-separated field names in the order given. Filtering and sorting happen before this selection. Choosing shared fields can allow sections with different shapes to be exported together; read the stderr warning, since the same field name can describe different things across sections. An unknown field is an error.

repeatable.

Keep rows satisfying every supplied condition. Quote each condition so the shell preserves its operators:

  • = and != compare exact, case-sensitive values. For list fields, they test whether the list contains that exact item.
  • ~ tests a case-insensitive substring, including within list items.
  • <, <=, >, and >= compare numbers. Values that cannot be read as numbers do not match.

Numeric comparisons use the underlying number where available; exports retain the page’s display value, such as "from $5.41".

Sort each selected section by one field, numerically for numeric fields and lexically otherwise. Missing values sort last in ascending order. --desc reverses that order and only has an effect with --sort.

integer; at least 0.

Keep at most this many records per selected section, after filtering and sorting. For a collection, the limit applies to its combined records.

one of none, compact, full; default "none".

  • none (default): the selected records as a JSON array.
  • compact: an object with source, selection, qualifications, and data, without page Markdown.
  • full: the same compact object plus the original saved artifact under context, including schemas, section relationships, and Markdown.

The selected data stays identical across all three levels. Full context may include unselected page content; field and row filters apply only to data. The compact and full levels require JSON. none leaves other formats unchanged.

file path.

Write UTF-8 to this file, replacing its contents if it exists. The confirmation goes to stderr. Without this option, the data goes to stdout.

Applicable capture and selection qualifications go to stderr for ordinary exports. With compact or full context, they travel inside the JSON; file output also reports them on stderr for the current caller. CSV remains data-only, without comment rows or companion files. Use contextual JSON when the recipient needs the qualifications as part of the file.

Successful local export returns 0 even when the saved capture is partial. That status confirms the export worked, not that it covers the whole site. Invalid selections, unreadable saves, and failed writes still fail.

All options: --format / -f, --fields, --where, --sort, --desc, --limit, --section, --kind, --collection, --context, --output / -o, --help.

For the longer inspection and export sequence, see Export the records you need.

Delete saved results from the local store. Choose a single result, every result, or a set selected by age and source URL.

REF is a handle, a friendly name, or latest. Choose exactly one selection route: REF, --all, or filters. The age and URL filters can be combined; a result must match both when both are supplied.

These examples use saved-quotes from analog rename. The capture uses handle 20260912-pvtqdw; match the reported handle to your own result before deleting it.

Preview removal of the sample result

analog rm saved-quotes --dry-run
Output
Would delete 20260912-pvtqdw.

The saved result still exists after this command.

Preview a cleanup by source URL

analog rm --url-contains quotes.toscrape.com --dry-run
Output
Would delete 20260912-pvtqdw (saved-quotes) https://quotes.toscrape.com/js/
1 saved result(s) would be deleted (dry run — nothing removed).

This capture’s store contains just the sample result. Your preview may list more: the filter selects every saved result whose URL contains this text. Nothing is removed by the preview.

Run this after you have finished the field-editing examples and no longer need the save:

Remove that one saved result

analog rm saved-quotes
Output
Deleted 20260912-pvtqdw.

Only saved-quotes is selected here, regardless of how many results the URL filter matched above. Its handle and friendly name no longer open a saved result.

Select every saved result. This cannot be combined with a reference or filters. Add --dry-run to inspect the selection without deleting it.

Select results saved more than the given duration ago, such as 30d or 12h. Use a whole number followed by m (minutes), h (hours), d (days), or w (weeks). This uses the save time, not the last time you opened the result.

Select results whose source URL contains the supplied text, ignoring case. Combine it with --older-than to restrict the selection by age too.

List what would be deleted and leave the saved files in place. This works with every selection route. When no results match a filter, the command reports that nothing matched.

All options: --all, --older-than, --url-contains, --dry-run, --help.

For the broader workflow, see Manage saved results.

Give a saved result a friendly name. The name works anywhere a handle does, including view, export, and rm. Changing it replaces the previous name; the handle and saved content stay the same.

REF is a handle, an existing friendly name, or latest. NAME must be unique in the local store, start with a letter or digit, and contain only letters, digits, -, or _, up to 64 characters. It cannot be latest or look like a handle.

--help

This uses the quotes result named quotes-before. Choose another name if saved-quotes is already in use:

Name the saved quotes page

analog rename quotes-before saved-quotes
Output
Renamed 20260912-pvtqdw → saved-quotes.

The captured result’s handle is 20260912-pvtqdw; yours will differ. Afterward, use saved-quotes in place of quotes-before. The field-editing and deletion examples refer to this same save. Delete it only when you have finished working with it.

Rename fields in a saved result’s structured records. Values stay the same. The change applies across all sections containing those field names; it does not rename the saved result itself.

Remembered renames are applied conservatively: if the page’s fields have changed too much, Analog skips the rename rather than guessing.

REF is a handle, a friendly name, or latest. Supply one or more OLD=NEW pairs, separated by spaces. Inspect the page with analog describe before choosing names.

  • RENAMES — repeatable.

This uses saved-quotes from analog rename, before any field edits. In its quotes section, text_2 contains authors and tags contains topics. Rename those fields only on this save:

Name the author and topic fields

analog rename-fields saved-quotes text_2=author tags=topics --once
Output
Renamed 2 field(s) on 20260912-pvtqdw. Fields now: topics, text, author, url, group, depth

The response lists fields across the saved page, including its navigation fields. The quote text remains under text.

Read one record with the new names

analog export saved-quotes -f json --section 0 --limit 1
Output
[
{
"topics": [
"change",
"deep-thoughts",
"thinking",
"world"
],
"text": "“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”",
"author": "by Albert Einstein"
}
]

The author and topics have the same values as before, under the names you chose. --section 0 selects the quotes; --limit 1 shows one record.

Change only the selected saved result. Omit this flag to also remember the names for future fetches of its URL. It does not remove previously remembered choices for that URL.

All options: --once, --help.

Unknown old names produce a warning and are skipped; known fields in the same command are still renamed. Each pair needs a nonempty old and new name. New names cannot contain , or =. Repeating an old name or creating a collision with another field is an error.

Put the fields you choose first in each section that contains them, in the order you give. Fields you omit keep their relative order after those fields. Values and record order stay the same.

The change is saved in place and, by default, remembered for future fetches of the same URL. Use --once to change this save only. Remembered orders skip fields that no longer appear on the page.

REF is a handle, a friendly name, or latest. Supply one or more FIELD names, separated by spaces. You can name just one to move it to the front.

  • FIELDS — repeatable.

This follows the rename-fields example: saved-quotes now has author, text, and topics in its quotes section. Put the author and quote first on this save:

Put the author before the quote

analog reorder-fields saved-quotes author text --once
Output
Reordered 20260912-pvtqdw. Fields now: author, text, topics, url, group, depth

topics follows the two named fields. Navigation sections keep their own fields.

Export one quote in the new column order

analog export saved-quotes -f csv --section 0 --limit 1
Output
author,text,topics
by Albert Einstein,“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”,change; deep-thoughts; thinking; world

The CSV header follows the saved field order: author,text,topics. The export prints one quote without changing the saved records.

Change only the selected saved result. Omit this flag to also remember the order for future fetches of its URL. It does not remove previously remembered choices for that URL.

All options: --once, --help.

Unknown names produce a warning and are skipped; known fields in the same command are still reordered. Naming a field more than once is an error.

Print help for the CLI or a command path. With no COMMAND, this lists the top-level commands. Subcommand paths work too; the response is the same help shown by that command’s --help flag.

Requesting help does not run the named command.

--help

  • COMMAND_PATH — repeatable.

Read help for a subcommand

analog help keys revoke
Output
Usage: analog keys revoke [OPTIONS] PREFIX
Revoke the key with this prefix (see 'analog keys list').
Options:
-h, --help Show this message and exit.
Exit codes (uniform across commands):
0 success
1 command error
2 usage error — bad flags or arguments
3 not signed in, or credential rejected
4 couldn't reach the backend
5 couldn't fetch the page — robots refusal, site block, or network
6 the page was fetched but extraction failed
130 interrupted — output identifies any saved partial capture

This shows the required prefix and exit-code guide without revoking a key.

Print a short guide to connecting an account, then fetching and searching the About page in one terminal command. A page overview is optional; Python is an alternative path. The command only displays instructions; it does not install software, start sign-in, or fetch a page.

--help

Read the guide in your terminal

analog quickstart

For the guided website version, start with Quickstart.

Print the documentation URL. This does not open a browser or make a network request.

--help

Find the documentation

analog docs
Output
https://getanalog.io/docs

Print how to reach the Analog team and point to the CLI feedback route. This does not send a message, submit feedback, or open an email client.

--help

Find the team’s contact details

analog contact
Output
team@getanalog.io
For a page that extracted poorly or a feature request, `analog feedback` is the fastest route — it goes straight into triage.

See Feedback for choosing a reporting route.