Page Extractor
Tool pipeline: the agent requests the page, Fetch URL brings it, Transform reduces it to the fields that matter — and only then the model reads it.
Updated on Sep 02, 2026
An entire web page within the model's context is expensive and noisy: menus, footers, cookie banners. What the agent needs is the title and text.
This flow shows tool chaining — the pipeline — which is the feature that almost nobody uses and saves the most tokens: the next tool processes the previous result before it reaches the model.
How to import
On the platform: Agents → Import, choose the downloaded file. It enters as a new draft (nothing existing is changed), with refreshed observability IDs. Then fill in what belongs to your environment — credentials, URLs, and knowledge bases — and publish.
{
"format": "hinow.agent",
"version": 1,
"exported_at": "2026-09-01T00:00:00Z",
"credentials_included": false,
"agent": {
"name": "Extrator de páginas",
"description": "Pipeline de ferramentas: busca a página, estrutura o resultado e só então entrega ao agente.",
"avatar": null,
"model": "hinow/hicode",
"system_prompt": null,
"config": {},
"tools": null,
"workflow": {
"nodes": [
{
"id": "start",
"type": "start",
"position": {
"x": 300,
"y": 0
},
"data": {
"label": "Início",
"variables": []
}
},
{
"id": "agent-1",
"type": "agent",
"position": {
"x": 285,
"y": 170
},
"data": {
"name": "extrator",
"model": "hinow/hicode",
"system_prompt": "O usuário envia uma URL. Use a ferramenta fetch_url para buscar o conteúdo e apresente: título da página e resumo em 3 bullets. Se não houver URL, peça uma.",
"config": {}
}
},
{
"id": "fetch-1",
"type": "fetch_url",
"position": {
"x": 560,
"y": 90
},
"data": {
"label": "Buscar página"
}
},
{
"id": "tf-1",
"type": "transform",
"position": {
"x": 560,
"y": 240
},
"data": {
"label": "Estruturar",
"config": {
"type": "pick",
"isArray": false,
"fields": [
{
"source": "title",
"target": "titulo"
},
{
"source": "content",
"target": "conteudo"
}
]
}
}
},
{
"id": "end-1",
"type": "end",
"position": {
"x": 305,
"y": 340
},
"data": {
"label": "Fim"
}
}
],
"edges": [
{
"id": "e-start-agent-1-d",
"source": "start",
"target": "agent-1"
},
{
"id": "e-agent-1-end-1-d",
"source": "agent-1",
"target": "end-1"
},
{
"id": "e-fetch-1-agent-1-tool",
"source": "fetch-1",
"target": "agent-1",
"sourceHandle": "tool",
"targetHandle": "slot-0"
},
{
"id": "e-fetch-1-tf-1-output",
"source": "fetch-1",
"target": "tf-1",
"sourceHandle": "output"
}
]
}
}
}| Card | Why it's here | What it does |
|---|---|---|
**Agent extractor** | Who converses and decides. | Receives the URL from the user and calls the tool. If no URL came, it asks. |
| **Fetch URL** | Brings the content. | Downloads the page and extracts the content. Connected to the agent's **slot** — it's a tool the model can call. |
| **Transform** | Reduces before the model sees it. | Mode pick: keeps only title → titulo and content → conteudo. Not in the agent's slot: it's **in the output** of Fetch URL. |
Notice the two different connections leaving the tools:
fetch-1 → agent-1withtargetHandle: "slot-0"— agent tool: enters the list of tools the model can call.fetch-1 → tf-1withsourceHandle: "output"— pipeline: the result from Fetch URL passes through Transform before returning.
Transform doesn't appear as a tool to the model. It's a filter on the return path — and that's why the context doesn't overflow.
- Monitor concurrency or pricing: Web Search → Fetch URL → Transform, and the agent receives a clean list.
- After your Webhook: the same Transform reduces your API's fat response to the 4 fields that matter — the practical workaround for
responseMappingthat doesn't run yet. - Summarize instead of cut: replace Transform with a Summarize card when the content is flowing text, not JSON.

