> ## Documentation Index
> Fetch the complete documentation index at: https://cloro.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Output formats

> Learn how to render proof-of-page HTML, request optional text and markdown outputs, and handle inline objects in cloro API responses for LLM analysis.

cloro API responses include multiple output formats. This guide covers how to use each one: rendering HTML as proof of the scraped page, and handling special objects embedded in text and markdown fields.

## HTML: proof of scraped page

When you request HTML from any endpoint using [`include.html: true`](/guides/making-requests/sync#html-format), the response includes a URL to the full scraped page stored on our CDN. This URL expires after 24 hours.

This raw HTML is the actual page the AI provider displayed. You can present it to your clients as proof of what was scraped.

### Rendering HTML cleanly

The raw HTML includes browser chrome (headers, footers, sidebars, cookie banners, and scripts). To render a clean version, use the [`@cloro-dev/response-parser`](https://www.npmjs.com/package/@cloro-dev/response-parser) npm package.

The library:

* Auto-detects the AI provider from the HTML
* Strips scripts, cookie banners, and other chrome
* Returns sanitized HTML you can render in any framework (React, Vue, Svelte, vanilla JS)

See the [response-parser README](https://github.com/cloro-dev/response-parser) for installation, API reference, framework examples, and supported options.

### Workflow

1. Make an API request with `include.html: true`
2. Fetch the HTML from the returned CDN URL
3. Parse it with `@cloro-dev/response-parser` to get clean, sanitized HTML
4. Render the result in your application

<Info>
  The HTML URL expires after 24 hours. Download and store the HTML if you need long-term access. There is no additional credit cost for including HTML.
</Info>

## Text and markdown: LLM analysis

For text analysis or LLM pipelines, use `result.text` or `result.markdown` (with [`include.markdown: true`](/guides/making-requests/sync#markdown-format)) from the API response directly. You don't need the response-parser for this.

However, be aware that **special objects are embedded as text** within these fields. When the AI provider displays shopping cards, places, ads, inline products, entities, or map entries, their content appears as text in `result.text` and `result.markdown`.

Sources and footers are **not** included in these fields.

### Handling special objects

The structured response fields (`result.shoppingCards`, `result.places`, `result.ads`, `result.inlineProducts`, `result.entities`, `result.mapEntries`) contain the same data in a clean, structured format. For LLM analysis:

1. **Use `result.text` or `result.markdown`** as your primary text input
2. **Parse out special object content** from the text using the patterns from the structured fields. You already have the exact data in those fields, so you know what to look for and remove
3. **Use the structured fields directly** when you need object-specific data (prices, ratings, URLs, etc.)

<Warning>
  If you pass `result.text` or `result.markdown` directly to an LLM without removing special object content, the model may treat product cards, ads, or place listings as part of the AI's natural language response.
</Warning>

## Common questions

### Why do I see errors when opening the HTML file in my browser?

The scraped HTML may include JavaScript from the original AI provider page. When opened directly in a browser, this JavaScript executes and can cause errors, broken layouts, or unexpected behavior.

To view the HTML correctly, disable JavaScript in your browser before opening the file: in Chrome, open DevTools (Cmd/Ctrl+Shift+I), press Cmd/Ctrl+Shift+P, and run "Disable JavaScript". Alternatively, use the [`@cloro-dev/response-parser`](https://www.npmjs.com/package/@cloro-dev/response-parser) library which automatically strips all scripts during parsing.
