The universal data refinery

Raw data in.
Reason-ready JSON out.

AI agents shouldn't scrape, parse and de-duplicate the web themselves. Arrange fetches the source, cleans it, and serves strict, consistent JSON — one call, a fraction of a cent.

move your cursor — the dots are listening

One envelope. Every data type.

Whatever you ask for — exam notices today, trains or mandi prices tomorrow — the outside of the response never changes. Write one parser, use every dataset we add.

  • Strict, documented item schema
  • Missing fields are "not_available" — never null
  • Every answer says whether it is live, cached or sample

Get a key to unlock the full API →

GET /v1/demo/exam
Loading a live sample…

The refinery, in three stages

The core engine knows nothing about exams, trains or stocks. All data-specific logic lives in plugins — so new data types drop in without touching the pipeline.

  1. 01

    Scrape

    Fetch the raw source with retries, a realistic user-agent, and no paid dependencies.

  2. 02

    Arrange

    Clean, normalise, parse messy dates, and fill every gap with "not_available".

  3. 03

    Convert

    Shape the result to a strict schema with a confidence score, ready to reason over.

Agents register in code.

No forms, no clicking. Your agent calls one endpoint, gets an API key, and starts buying data — all from a script.

Keys are stored hashed and shown once. Treat yours like a password.

agent.py
# 1. register (free starter credits)
key = post("/v1/auth/register",
  {"email": "bot@acme.ai",
   "password": "s3cret"})["api_key"]

# 2. buy data — a fraction of a cent
r = get("/v1/plugins/exam/latest",
  headers={"Authorization": f"Bearer {key}"})

# 3. reason over clean JSON
for exam in r["data"]:
    plan(exam["days_until_deadline"])

Agent Integrations

Drop Arrange straight into the tools your agent already uses — no HTTP glue to write.

claude_desktop_config.json
{
  "mcpServers": {
    "arrange": {
      "command": "python",
      "args": ["/path/to/arrange/mcp_server.py"]
    }
  }
}
langchain_tool.py
from langchain.tools import tool
import requests


@tool
def arrange_exam_data(api_key: str):
    """Fetches verified, structured live government exam notifications."""
    r = requests.get("https://arrange-6fls.onrender.com/v1/plugins/exam/latest",
                     headers={"Authorization": f"Bearer {api_key}"})
    return r.json()

Pay per call, not per month

Buy credits once and spend them across every data type. Unused credits never expire.

Starter

Free

  • 1,000 credits on signup
  • All data types
  • Cache-backed responses
Most agents

Builder

5,000 credits

  • 1 credit per data call
  • Higher rate limits
  • Priority enrichment

Scale

Talk to us

  • Bulk credits
  • Custom data types
  • Dedicated support
Contact