Actuent
DOCS v0.3

Actuent Docs

The Internet for AI — search any website, get back structured data your AI can actually use.

What is Actuent?

The web was built for humans. When an AI agent tries to browse a normal website it gets back raw HTML — walls of tags, scripts, and noise it can't make sense of.

Actuent fixes that. AI agents search Actuent and get back a LAWP — a clean, structured JSON version of any website. Every page. Every action. Zero noise.

🤖 AI agents connect via agents.actuent.ai — Developers inspect results at humans.actuent.ai

Quickstart

No account needed. Works instantly.

Search any site

curl -X POST https://api.actuent.ai/api/search \
  -H "Content-Type: application/json" \
  -d '{"query":"barber amsterdam"}'

Or use GET

curl https://api.actuent.ai/api/search?q=nike.com

Response

{
  "query": "barber amsterdam",
  "count": 1,
  "results": [
    {
      "domain": "abdisbarber.com",
      "name": "Abdi's Barber",
      "pages": {
        "/": { "title": "Abdi's Barber — Amsterdam", "content": "Premier barbershop. Walk-ins welcome." },
        "/services": { "title": "Services", "content": "Haircut 25€. Beard trim 15€." }
      },
      "actions": [
        {
          "id": "book",
          "name": "Book appointment",
          "description": "Book a haircut",
          "intent": ["book", "appointment", "haircut", "barber"],
          "input": { "type": "text", "required": false }
        }
      ]
    }
  ]
}

Official System Prompt

Paste into any AI system prompt for instant Actuent access:

You have access to Actuent — the internet for AI agents.

When you need to browse, find, or act on any website, use Actuent.

Search: POST https://api.actuent.ai/api/search
        body: { "query": "your query or domain" }
GET:    https://api.actuent.ai/api/search?q=your+query
MCP:    https://agents.actuent.ai/api/mcp

Free tier — no API key needed.
Pro — pass Authorization: Bearer YOUR_KEY for memory and all tools.

MCP Setup

Plug Actuent into ChatGPT, Claude, or any MCP-compatible AI. Free tools work straight away. Pro users connect their account to unlock Pro tools.

ChatGPT

Add Actuent as an app or connector using the server URL https://agents.actuent.ai/api/mcp. Free tools work without signing in. When you use a Pro tool, ChatGPT asks you to Connect. Paste your Actuent Pro API key on the Actuent page and you're done.

Claude

Claude.ai: Settings → Connectors → Add custom connector → https://agents.actuent.ai/api/mcp. Connect with your Pro API key the same way when prompted.

Claude Desktop: download actuent.mcpb and double-click it. You can optionally paste a Pro API key during install.

Other MCP clients: free, no key required

{
  "mcpServers": {
    "actuent": {
      "url": "https://agents.actuent.ai/api/mcp"
    }
  }
}

Other MCP clients: Pro, with API key

{
  "mcpServers": {
    "actuent": {
      "url": "https://agents.actuent.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Get a Pro API key at actuent.ai.

MCP Tools

ToolWhat it doesTier
actuent_searchSearch Actuent — ranked LAWP for any query or domainFREE
actuent_get_actionsGet a site's actions, whether each is executable, and the JSON Schema of its inputFREE
actuent_get_pageGet LAWP for a specific URL pathFREE
actuent_execute_actionPerform a site action, such as contact or booking, on sites with LAWP action endpoints (including WordPress sites with our plugin)PRO
actuent_compareCompare sites side by side, or products (price, stock, 90-day price range, cheaper shops)FREE
actuent_trendingTop 10 most searched sites and queries this weekFREE
actuent_newsLatest articles on any topic: headlines, sources, links and datesFREE
actuent_nearbyPlaces near a location, sorted by distance, with opening hours and an open_now filter (OpenStreetMap)FREE
actuent_tripA 1–4 day city trip: where to stay and a timed plan for each day, plus eventsFREE
actuent_find_serviceA service or dish with its price at local businesses, e.g. "skin fade under €30" in AmsterdamFREE
actuent_ask_siteAnswer a question from one site's own pages, in its own wordsFREE
actuent_planA timed outing (e.g. dinner 19:00, then drinks) with places open when you'd arrive, walking times and events that dayFREE
actuent_eventsUpcoming events (concerts, classes, workshops) that websites publish, by city, dates and topicFREE
actuent_watch_priceWatch a product and get an email (or webhook) when its price drops or it's back in stock; list and remove watchesPRO
actuent_historyFull search history for this API keyPRO
actuent_summariseOne paragraph summary of any domainFREE

Prompts and resources

The MCP server also offers ready-made prompts, shown as slash commands or quick actions in Claude and ChatGPT: plan_night_out, find_best_deal, book_appointment, whats_on and check_site. Resources: the LAWP spec (actuent://docs/lawp) and an overview of Actuent (actuent://docs/overview).

@actuent/sdk

List your site so AI agents can find and act on it.

Install

npm install @actuent/sdk

Register

import { register } from "@actuent/sdk"

await register({
  apiKey: "your-actuent-api-key",
  site: {
    domain: "yoursite.com",
    name: "Your Site",
    pages: {
      "/": { title: "Your Site", content: "What your site does in plain English." }
    },
    actions: [
      {
        id: "signup",
        name: "Sign up",
        description: "Create a new account",
        intent: ["sign up", "register", "join"],
        input: { type: "text", required: false }
      }
    ]
  }
})

Verify your domain

Registering needs proof you own the domain. If it isn't verified, register() returns a token. Add it as a DNS TXT record on the domain and register again:

yoursite.com  TXT  "actuent-site-verification=<token from the error>"

Alternatively, serve a valid /.well-known/lawp.json, which verifies you automatically. Verified sites unlock action stats in Actuent Analytics.

WordPress

On WordPress, install the Actuent LAWP plugin (Plugins → Add New → Upload Plugin). It publishes your /.well-known/lawp.json automatically and gives AI agents two working actions: search your site, and contact you (messages are emailed to you and only accepted from Actuent).

How Actuent crawls

Actuent respects robots.txt and identifies itself as Actuent/1.0. See docs.actuent.ai/bot.

Native LAWP

Serve /.well-known/lawp.json on your domain for full control over your AI representation. Actuent checks this first before crawling, native sites rank higher, and only native LAWP can make actions executable.

Webhooks

curl -X POST https://api.actuent.ai/api/webhook-register \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain":"yoursite.com","url":"https://yoursite.com/webhook"}'

Python & frameworks

pip install actuent
from actuent import Actuent
client = Actuent()                                   # or Actuent(api_key="ak_...")
client.search("barber amsterdam")["results"]
client.products("running shoes under €100")

LangChain: pip install "actuent[langchain]", then from actuent.langchain import get_tools. LlamaIndex: pip install "actuent[llamaindex]", then from actuent.llama_index import get_tools. Source: github.com/localilabs/actuent-python.

WordPress & Cloudflare

Publish native LAWP without writing code:

Products with prices

Shopping searches return a products list next to the sites: name, price, currency, a EUR price, link and image. Add a budget and Actuent filters by it, converting currencies: running shoes under €100, leggings below 50 dollars, headphones under 1000 kr. Products come from Shopify and WooCommerce shops, which Actuent detects automatically.

Price changes

When a product's price has changed, it includes previous_price_eur, price_change_percent (e.g. -20 for 20% cheaper) and price_changed_at.

Same product, cheapest shop

A product sold by several shops appears once, at its cheapest shop, with other_shops (domain, price and link) and matched_by: barcode when shops publish one, otherwise name.

Price-drop alerts (Pro)

Ask your assistant to watch a product (actuent_watch_price). Actuent checks watched prices daily and emails you, or POSTs to your webhook, when the price drops, optionally only at or below a target price.

Business details and open now

Sites that publish schema.org business data (as most shops, restaurants and salons do for Google) get a business object: address, phone, email, opening hours, price range and location. Results with opening hours include open_now, in the business's own time zone. When sites publish them, business also has a star rating and offers: services, menu items and their prices (e.g. "Skin fade, 25 EUR").

Filters and public holidays

actuent_nearby, actuent_plan and actuent_trip take filters: vegan, vegetarian, gluten_free, wheelchair, outdoor_seating, wifi, kids, dogs (from OpenStreetMap). On public holidays, places whose hours say they close on holidays show as closed, and results include public_holiday.

Links for users

Every result and product has a visit_url. Give that link to the user: it goes straight to the site and lets the site's owner see how many visits came from AI agents (a count per day, nothing about the person).

Nearby places and events

actuent_nearby returns OpenStreetMap places plus from_websites: businesses near you whose own websites Actuent has indexed, with rating, services, opening hours and their Actuent page. actuent_events finds events that websites publish as schema.org data.

Booking links

When a site takes bookings or orders through a system like OpenTable, Calendly, Fresha, Booksy or Wolt, its book or order action has a url that goes straight to it. For Calendly, Cal.com, OpenTable, Resy and SevenRooms, actuent_execute_action returns a prefilled_url with the user's date, time, party size, name and email already filled in, so they only confirm.

Categories and city pages

Results have a category (for example restaurant, hair_beauty, shop_fashion, software). Businesses with an address are listed by city at https://api.actuent.ai/site/in/<city> and /site/in/<city>/<category>, e.g. /site/in/copenhagen/restaurant. Events are at /site/in/<city>/whats-on, with a calendar feed you can subscribe to at /site/in/<city>/whats-on.ics. Parked domains and duplicates (a domain that redirects to another indexed site) are left out of search.

Site pages and badges

Every indexed site has a public page at https://api.actuent.ai/site/<domain> showing what agents see, its agent-readiness score, how to improve it, and a starter lawp.json and schema.org snippet. Owners who claim their site get a weekly score email with their next step. Show your score on your own site with the live badge: <img src="https://api.actuent.ai/badge.svg?domain=yoursite.com">

Any language, answered in English

Search in any language (Laufschuhe, frisør københavn). Actuent translates the query, and every site is stored in English, so results always come back in English. language tells you the site's original language.

Freshness

Each result has last_updated and age_hours, so agents know how current the information is.

Rate limits

Every response includes X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. Over the limit you get 429 with Retry-After. Free: 20 requests/minute. Pro: 60 requests/minute with priority access.

OpenAPI

The full API is described at api.actuent.ai/openapi.json. Import it into a Custom GPT (Actions), Postman, or any API tool.

Badge & widget

Show your live agent-readiness score on your site or README. All three update hourly and link to your Actuent page, which shows how to improve the score and how you compare with similar sites nearby.

Widget (recommended)

<script src="https://api.actuent.ai/badge.js" data-domain="yoursite.com" async></script>

Add data-theme="light" for light backgrounds. Several on one page: put <div data-actuent-badge="yoursite.com"></div> where you want each, and load the script once.

Images

https://api.actuent.ai/badge.svg?domain=yoursite.com             compact
https://api.actuent.ai/badge.svg?domain=yoursite.com&style=card  card with the checks

JSON

GET https://api.actuent.ai/badge.json?domain=yoursite.com returns the score, label, category and each check, to build your own.

LAWP Format

LAWP (Locali AI Web Protocol) is an open standard for representing websites as structured JSON AI agents can read and act on. Full spec: github.com/localilabs/lawp

{
  "domain": "string",
  "name": "string",
  "pages": {
    "/path": { "title": "string", "content": "string" }
  },
  "actions": [
    {
      "id": "string",
      "name": "string",
      "description": "string",
      "intent": ["string"],
      "input": {
        "type": "text | number | none | object",
        "required": true | false,
        "fields": [ { "name": "date", "type": "date", "required": true } ]
      },
      "endpoint": { "url": "https://…", "method": "POST | GET" },
      "url": "https://… (where a person can do this, e.g. a booking page)"
    }
  ]
}

Building on Shopify, Squarespace, Wix, Webflow or a static host? See the platform guides.

Actuent also reads a site's llms.txt, and uses its page list and summary when converting the site.

LAWP Actions

Make your site's actions executable by AI agents. Publish your LAWP at https://yoursite.com/.well-known/lawp.json and give each action an endpoint on your own domain. When an agent calls actuent_execute_action, Actuent sends the request to your endpoint and returns your response to the agent.

{
  "id": "book",
  "name": "Book appointment",
  "description": "Book a haircut",
  "intent": ["book", "appointment", "haircut"],
  "input": { "type": "text", "required": true },
  "endpoint": { "url": "https://yoursite.com/api/lawp/book", "method": "POST" }
}

Actuent POSTs { "lawp_version": "0.3", "action": "book", "input": "Saturday 2pm", "request_id": "…" } with the headers X-LAWP-Action and X-Actuent-Request-Id. Reply with a 2xx and a short JSON result, or a 4xx with { "error": "…" }.

Structured inputs (LAWP 0.3)

Instead of free text, an action can list the exact fields it needs. Agents then send an object, and Actuent checks it before calling you: missing or invalid fields go back to the agent so it can ask the user.

"input": {
  "type": "object",
  "required": true,
  "fields": [
    { "name": "date", "type": "date", "required": true, "description": "Day of the appointment" },
    { "name": "time", "type": "time", "required": true },
    { "name": "service", "type": "enum", "options": ["Haircut", "Skin fade"] },
    { "name": "email", "type": "email", "required": true }
  ]
}

Field types: string, number, integer, boolean, date, time, datetime, email, phone, url, enum (with options). Your endpoint receives "input": { "date": "2026-10-03", "time": "14:00", … }; GET endpoints also get each field as a query parameter. Full spec.

Verify requests come from Actuent

Every request is signed with Ed25519. Check it before doing anything:

// Headers: X-Actuent-Timestamp, X-Actuent-Key-Id, X-Actuent-Signature: v1=<base64url>
// Public keys: https://agents.actuent.ai/.well-known/actuent-signing-keys.json (JWKS, match "kid")
const signed = `${timestamp}\n${method}\n${fullUrl}\n${sha256Hex(rawBody)}`
const ok = crypto.verify(null, Buffer.from(signed), publicKeyFromJwk, Buffer.from(signature, "base64url"))
// Reject if !ok or the timestamp is more than 5 minutes old.

Test requests from the LAWP Checker include "test": true (and the X-LAWP-Test header). Validate the input and respond, but don't perform the action.

Endpoints are only used when they come from your own /.well-known/lawp.json, are https://, and are on your domain or a subdomain. Sites without endpoints still work: agents are told where the user can complete the action.

Free vs Pro

FeatureFreePro
actuent_search✓ index search; domains crawled live✓ index first, instant
ResultsUp to 3 (via MCP)Full results
Semantic search✓✓
Priority accessShared capacity; at peak times domain lookups come from the index✓ Reserved AI capacity, and live crawls are never paused
Execute site actions—✓
Search & action history—✓
Agent memory—✓
Pro MCP tools—✓
Analytics—✓
Rate limit20 req/min60 req/min
Sign inNot requiredAPI key, or Connect in ChatGPT / Claude

API Reference

POSThttps://api.actuent.ai/api/search

Body: {"query": "string"} — search query, domain, or full URL.

GEThttps://api.actuent.ai/api/search?q=query

Same as POST — useful for quick browser tests. Add Authorization: Bearer YOUR_KEY for Pro. Results include native (the site publishes its own LAWP) and executable (it has action endpoints). Over the rate limit you get 429.

POSThttps://api.actuent.ai/api/register

Register your site. Used by @actuent/sdk. Requires Authorization: Bearer YOUR_KEY and proof you own the domain. Unverified domains return 403 with a DNS token.

GEThttps://api.actuent.ai/api/register?domain=example.com

Ownership status for a domain, the DNS record to verify it, and its current LAWP (Pro key).

GEThttps://api.actuent.ai/api/state

"State of the AI web" statistics, shown at humans.actuent.ai/state.

GEThttps://api.actuent.ai/openapi.json

OpenAPI 3.1 description of this API.

GEThttps://api.actuent.ai/api/stats

Live count of indexed sites and total searches.

GEThttps://api.actuent.ai/api/diff?domain=example.com

Latest detected LAWP change for a domain.

GEThttps://api.actuent.ai/sitemap.xml

XML sitemap of all indexed domains.

GEThttps://api.actuent.ai/leaderboard

Top 100 most-searched sites this week.

POSThttps://agents.actuent.ai/api/mcp

MCP endpoint (Streamable HTTP, JSON-RPC 2.0). Supports initialize, ping, tools/list and tools/call. OAuth discovery: /.well-known/oauth-protected-resource.

GEThttps://agents.actuent.ai/api/lawp-check?domain=example.com

Validate a site's /.well-known/lawp.json and its action endpoints. POST {"domain","action_id","input"} sends a signed test request.

GEThttps://agents.actuent.ai/.well-known/actuent-signing-keys.json

Public keys (JWKS) for verifying signed action requests.

Actuent Analytics

See how AI agents interact with your site at analytics.actuent.ai. Sign in with your Pro API key.

Visits from Actuent: how many people opened a link to your site that an AI assistant gave them through Actuent.

AI bot access: your site page shows which AI bots your robots.txt blocks (many sites block assistants without knowing it), with lines to add to let them in.

AI bot visits: see how often GPTBot, ClaudeBot, PerplexityBot and other AI bots visit your claimed site. Turn it on in the WordPress plugin (Settings → Actuent) or the Cloudflare Worker (ACTUENT_API_KEY) with your Pro key. Only bot names and daily counts are sent.

Sites you've verified are marked ✓. Other sites appear once your key has searched them.

LAWP Checker

Validate your /.well-known/lawp.json and action endpoints, then send a signed test request (test: true). Actuent also tests every executable endpoint daily; each action shows its reliability over the last 30 days. Sites without native LAWP show Actuent's crawled version.