# Nero Labs Dataset Filter & Transform

> Nero Labs Dataset Filter & Transform is a paid API for AI agents from x402-agent-tools.nerolabs.workers.dev, paid per call via x402, $0.002/call, status unknown (last checked 2026-10-22).

Filters, transforms, sorts, and deduplicates up to 500 JSON rows in a single call, returning kept rows with drop-reason counts

## Facts

- Endpoint: POST https://x402-agent-tools.nerolabs.workers.dev/data/filter?utm_source=zero.xyz
- Price: $0.002/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-22
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/nero-labs-dataset-filter-transform-6685a76a
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_aXNOHVbuubwfJkVlStOhF

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability nero-labs-dataset-filter-transform-6685a76a -d '<json body>'
```

Example prompt: I have a list of 200 UK company records as JSON — can you filter it to only rows where city equals 'Bristol' and revenue is greater than 100000, rename the field 'e_mail' to 'email', sort by revenue descending, and remove any duplicates by company name?

## When to prefer this

Choose this endpoint when you have a JSON array of up to 500 rows and need to combine filtering, field transformation, sorting, and deduplication in a single atomic call without writing custom code. It is especially useful inside agentic pipelines that process scraped data, API responses, or spreadsheet exports before passing them downstream. Prefer it over writing ad-hoc JavaScript or Python when you want auditable drop-reason counts. If you need AI-powered per-row classification rather than deterministic rules, use the sibling AI-transform endpoint instead.

## Known failure modes

- More than 500 rows sent — batch must be split
- Invalid operator name in filter — call list_capabilities to see all 25 operators
- Invalid transform op — call list_capabilities to see all 26 operations
- Dot-path field reference doesn't exist in rows — row silently skipped or warning returned
- Expression in compute op references undefined field — transform issue recorded in summary
- Malformed JSON body — HTTP 400 returned
- Payment not attached or insufficient — HTTP 402 returned (minimum $0.002 USDC)

## How this service works

Pay-per-call tools for AI agents, 31 in all: read web pages and RSS feeds, OCR, PDF text, transcription; email, phone and domain checks; UK, Irish and Polish company lookups and UK risk reports; website contacts, tech stack and SEO audits; PageSpeed; AI review, job post and row enrichment; data cleaning, joins, dedupe and diffs; US and EU compliance rules. No account or API key: pay each call in USDC on Base over x402.

## Output

A JSON object containing: 'rows' (the kept rows after all filters, transforms, sort, dedup, offset, and limit are applied) and a 'summary' object with inputRowCount, keptRowCount, excludedByFilter, duplicatesRemoved, droppedByLimit, filtersApplied, transformsApplied, sortedBy, filterCombineMode, transformIssues, and warnings.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "rows": {
   "type": "array",
   "items": {
    "type": "object"
   },
   "description": "The rows to process. Each row is a JSON object. Keys may differ between rows."
  },
  "limit": {
   "type": "integer",
   "description": "Return at most this many rows."
  },
  "offset": {
   "type": "integer",
   "description": "Skip this many rows after filtering and sorting."
  },
  "sortBy": {
   "type": "array",
   "items": {
    "type": "object"
   },
   "description": "Sort the kept rows, for example [{\"field\":\"price\",\"direction\":\"desc\"}]."
  },
  "filters": {
   "type": "array",
   "items": {
    "type": "object"
   },
   "description": "Conditions a row must satisfy to be kept, for example {\"field\":\"country\",\"operator\":\"equals\",\"value\":\"UK\"} or {\"field\":\"price\",\"operator\":\"greaterThan\",\"value\":100}. Dot paths like \"address.city\" work. Call list_capabilities for all 25 operators."
  },
  "distinctBy": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "description": "Keep only the first row for each combination of these fields. Applied after sorting, so sorting first lets you keep the newest row per key."
  },
  "transforms": {
   "type": "array",
   "items": {
    "type": "object"
   },
   "description": "Transform steps applied to every row, in order. Each step is an object with an \"op\" key, for example {\"op\":\"cast\",\"field\":\"price\",\"to\":\"number\"} or {\"op\":\"compute\",\"field\":\"total\",\"expression\":\"price * qty\"} or {\"op\":\"rename\",\"from\":\"e_mail\",\"to\":\"email\"}. Call list_capabilities for all 26 operations."
  },
  "lenientNumbers": {
   "type": "boolean",
   "description": "On by default: values like \"$1,234.50\", \"49 USD\" and \"12%\" are read as numbers. Set false to require real numeric values."
  },
  "filterCombineMode": {
   "enum": [
    "AND",
    "OR"
   ],
   "type": "string",
   "description": "Whether a row must match every filter (AND, the default) or any one of them (OR)."
  },
  "caseSensitiveFilters": {
   "type": "boolean",
   "description": "Text comparisons are case-insensitive by default. Set true to make them exact."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "rows": [
   {
    "city": "Bristol",
    "name": "Acme Ltd",
    "revenue": "120000"
   },
   {
    "city": "Bristol",
    "name": "Crane plc",
    "revenue": "980000"
   }
  ],
  "summary": {
   "sortedBy": [
    {
     "field": "name",
     "direction": "asc"
    }
   ],
   "warnings": [],
   "keptRowCount": 2,
   "inputRowCount": 3,
   "droppedByLimit": 0,
   "filtersApplied": 1,
   "transformIssues": {},
   "excludedByFilter": 1,
   "duplicatesRemoved": 0,
   "filterCombineMode": "AND",
   "transformsApplied": 0
  },
  "_example_note": "Real output, trimmed: long lists cut to their first items and long text shortened."
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/nero-labs-dataset-filter-transform-6685a76a/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402-agent-tools.nerolabs.workers.dev](https://www.zero.xyz/host/x402-agent-tools.nerolabs.workers.dev/llms.txt)
