Tell customers what you’ll actually do.
Your listing says what you offer. Signals say what you’re willing to do: smaller jobs, weekend work, travelling further, flexible payment. Ottomind matches on them, shows customers the ones you choose, and checks afterwards that they held up. Type them in, or publish them on your own website and Ottomind keeps them in sync.
What a signal looks like
- Job size“Happy to take small repairs”
A $150 leak doesn’t get filtered out as too small.
- Area“Travels up to 20 miles”
Customers just outside your listed area still find you.
- Timing“Works weekends”
Saturday requests come to you first.
- Payment“Offers payment plans”
People with a tight budget know they can ask.
- Language“Speaks Spanish”
Spanish-speaking customers find you by asking in Spanish.
- Type of work“Restores vintage furniture”
The niche work you love, not just your trade.
Three ways to set them up
Pick whichever fits. They work together: signals you type and signals from your website live side by side.
Type them in Ottomind
Write a sentence in Business → Signals: “happy to take small jobs within 10 miles this month”. Ottomind turns it into signals for you to confirm.
For: Most businesses
List your business free →Publish them on your site
Add one tag and one small file to your website. Ottomind reads it every day, like a search console, and keeps your signals in sync. Change your site, and Ottomind follows.
For: Businesses with a website
How it works →Generate them from your systems
Your booking, inventory or scheduling system writes the file. Use the SDK, the validator API, or let your coding agent set it up through MCP.
For: Teams with developers or a coding agent
Developer tools →Your website, kept in sync
It works the way a search console reads your site. You prove the site is yours, publish your signals there, and Ottomind’s crawler, OttomindBot, reads them every day.
- 1
Connect and verify
In Business → Website, enter your site. Paste the verification meta tag into your page’s header, or put the token in your file.
- 2
Publish your Signals file
One small JSON file at /.well-known/ottomind.json. Copy the example below, or let the SDK or your coding agent write it.
- 3
Crawl, then forget about it
Press Crawl now. The console shows what OttomindBot read and anything to fix. After that it checks daily.
The file
{
"version": 1,
"verification": "om-your-token",
"signals": [
{ "type": "job_size", "statement": "Happy to take small repairs",
"amount": 300, "currency": "USD", "visibility": "public" },
{ "type": "area", "statement": "Travels up to 20 miles", "radius_km": 32 },
{ "type": "timing", "statement": "Works weekends" }
]
}Full reference: Signals file docs · a live example site
What happens when you change it
- You add a signal to your file
- It goes live on the next crawl.
- You change one
- It updates; its history with customers is kept.
- You remove one
- It’s retired.
- You pause one in Ottomind
- It stays paused, whatever the file says.
- Your site is down for a while
- Nothing changes. Ottomind tries again tomorrow.
- The verification tag is removed
- Signals from your site stop counting until it’s back.
Check your site now
See what OttomindBot would read: your verification tag, your Signals file and any problems. Nothing is saved, and you don’t need an account.
Setup by platform
Next.js, React and Node
Serve the file from a route at /.well-known/ottomind.json. The SDK builds and checks it for you (code below).
Netlify, Vercel, Cloudflare Pages and other static hosts
Put ottomind.json in a .well-known folder inside the folder your host publishes (often public/). Add the meta tag to your home page.
GitHub Pages
Same as other static hosts, plus an empty .nojekyll file at the root: GitHub Pages skips folders starting with a dot without it.
WordPress
Add the meta tag with a header-code plugin or your theme’s header. Upload ottomind.json to a .well-known folder on your server, or ask your host to.
Squarespace, Wix, Webflow, Shopify
Add the meta tag in your site’s custom header code. These builders usually can’t host a file at /.well-known, so manage your signals in Ottomind; you can still verify your site.
For developers and coding agents
When your signals live in your own systems (bookings, inventory, schedules), let them write the file. Everything here is free and needs no API key.
The SDK
@ottomind/signals builds the file, checks it with Ottomind’s rules and serves it from any Fetch API runtime.
import { defineSignalsFile, signalsResponse } from "@ottomind/signals";
const { file } = defineSignalsFile({
verification: process.env.OTTOMIND_SITE_TOKEN,
signals: [{ type: "timing", statement: "Works weekends" }],
});
export const GET = () => signalsResponse(file); // app/.well-known/ottomind.json/route.tsMCP for coding agents
Ask Claude Code, Cursor or any MCP client to “add Ottomind Signals to my site”. The read-only server explains the format, writes and checks the file, and previews what OttomindBot sees on your deployed site.
# Claude Code
claude mcp add --transport http ottomind-signals https://www.ottomind.dev/api/mcp/signals
# Cursor: .cursor/mcp.json
{ "mcpServers": { "ottomind-signals": { "url": "https://www.ottomind.dev/api/mcp/signals" } } }Tools: get_signals_spec, generate_signals_file, validate_signals_file, preview_site. It never verifies a site or changes a listing; that stays with the owner.
API and schema
POST /api/signals/validate: send a file, get back which signals Ottomind would use and why. Good for CI./schemas/signals-v1.json: JSON Schema for editors and validators./llms.txt: a plain-text map of Ottomind for AI assistants.
Honest by design
Your claim, labelled as yours
Customers see signals as what you told Ottomind, not as something Ottomind checked.
Checked by the people you served
After a job, customers say whether a signal held up. A record like “4 of 4” builds trust; a poor one stops counting.
About the job, never the person
Signals can’t screen customers by age, sex, race, religion or family. Ottomind skips anything that tries.
Questions
Do I need a developer, the SDK or the API?
No. Most businesses type their signals into Ottomind. Publishing them on your website is optional, and the SDK and API are for businesses whose signals come from their own software.
What does it cost?
Nothing. Signals and the website sync are free on every plan, including Free. Paying never changes your signals or your ranking.
How do signals affect matching?
They tell Ottomind what you’re willing to do beyond your listing, so a request can fit you even when your listing alone wouldn’t say so. They’re one part of fit, alongside your services, area and reviews. Businesses can’t pay to rank higher.
Will customers see them?
Only the ones you mark public. The rest are used to match. Every signal is shown as your own claim, and after a job Ottomind asks the customer whether it held up; the answers build your record.
Is anything not allowed?
Signals are about the job, never about who the customer is: nothing about age, sex, race, religion or family. Licenses and insurance are checked in your listing instead, and financing is shown as subject to approval.
What does OttomindBot read?
Only your robots.txt, the page you connect and your Signals file. It follows robots.txt, identifies itself as OttomindBot, and reads once a day or when you press Crawl now.
What if my site can’t host a file?
Verify with the meta tag if you like, and keep your signals in Ottomind. Everything works the same.