{
 "$schema": "https://agentdrives.com/schemas/tool.schema.json",
 "id": "prd_01m57vgtner83wdhpwzmejjztx",
 "ids": {
  "org": "org_01m57vgtne0cx90h1aq9x6rhry",
  "surfaces": {
   "web": "srf_01m60jdhf1ah2dffq5m918qdq0",
   "api": "srf_01m60jdhf1k12sdm7zc5xrmbmh",
   "mcp": "srf_01m60jdhf1h7e2z8bmg3w5mtwf"
  },
  "slugs": [
   "lessannoyingcrm"
  ],
  "domain": "lessannoyingcrm.com"
 },
 "slug": "lessannoyingcrm",
 "name": "Less Annoying CRM",
 "url": "https://www.lessannoyingcrm.com",
 "domain": "lessannoyingcrm.com",
 "category": "crm",
 "category_name": "CRM",
 "tested_at": "2026-10-28",
 "run": "20261028T020456Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261028T020456Z",
   "date": "2026-10-28",
   "level": 4,
   "engine": {
    "model": "claude-opus-5-5",
    "driver": 5,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "skip",
    "version": "2026.10.27",
    "commit": "132c4d41a411d7acee60092fedfe2af74cee1ec3",
    "prompts": {
     "version": "2026.10.27",
     "commit": "845036a5a40ff8a1d6d9ed752a31210bed0cbc93"
    },
    "rules": {
     "version": "2026.10.27",
     "commit": "fe3b689b94a4f5fc8abd3c7adc454960326b9514"
    }
   },
   "stop": "delete",
   "paid": false,
   "agent_paid": null
  }
 ],
 "level": 4,
 "level_name": "Runs on its own",
 "level_selfhost": null,
 "entry": "self-start",
 "door": {
  "passed": 1,
  "tries": 1,
  "self_start": true
 },
 "badges": [],
 "not_counted": null,
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: sign-up in a browser",
   "way": "email_password"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "yes",
   "text": "Work done: 100% of the core"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Card checkout",
   "value": "not_tried",
   "route": "card_checkout",
   "why": "no_card"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Nothing to cancel; its account stays",
   "at": "delete",
   "left": "stuck",
   "delete": {
    "state": "no",
    "text": "Can't delete its account",
    "why": "Settings > Close account (reason and two checkboxes) -> \"Your account has been canceled.\" A new login was refused with \"Your account has been closed.\" It is a web page only; the data is archived for a year and purged earlier only on…"
   }
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Learn",
   "state": "yes",
   "text": "Docs it can act on: llms.txt and an MCP server",
   "have": [
    "llms_txt",
    "mcp"
   ],
   "docs": "gaps"
  },
  {
   "key": "access",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: sign-up in a browser",
   "way": "email_password",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "yes",
   "text": "Work done: 100% of the core",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Card checkout",
   "value": "not_tried",
   "route": "card_checkout",
   "why": "no_card",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Nothing to cancel; its account stays",
   "at": "delete",
   "left": "stuck",
   "delete": {
    "state": "no",
    "text": "Can't delete its account",
    "why": "Settings > Close account (reason and two checkboxes) -> \"Your account has been canceled.\" A new login was refused with \"Your account has been closed.\" It is a web page only; the data is archived for a year and purged earlier only on…"
   },
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "browser_signup",
   "label": "Sign-up in a browser",
   "routes": [
    "email_password"
   ],
   "minutes": 4,
   "core": "8/8"
  }
 ],
 "minutes": 4,
 "next": {
  "to": 5,
  "text": "Next: pay without a person"
 },
 "stop": "delete",
 "core": "8/8",
 "scores": {
  "coverage": 92,
  "reliability": 62,
  "resilience": 56,
  "setup": 55,
  "surface_coverage": 92,
  "docs_accuracy": 97,
  "docs_completeness": 51
 },
 "parts": {
  "holds_up": 59,
  "docs_match": 83,
  "setup": 55,
  "security": "private",
  "standards": []
 },
 "reliability_method": "pass^k",
 "resilience": {
  "parts": {
   "error_legibility": 61,
   "recovery": 75,
   "idempotency": 33
  },
  "summary": {
   "error_legibility": "mixed",
   "recovery": "good",
   "idempotency": "risky",
   "rate_limits": "none-seen",
   "notes": "Most errors name the field and the accepted values, but a bad API key gets an empty 400 and unknown parameters are silently ignored. Repeating a contact create makes a duplicate (no idempotency key); 15 quick calls drew no 429 and no rate-limit headers."
  }
 },
 "stress": [
  {
   "capability": "Create a contact",
   "probe": "missing required Name",
   "outcome": "400 {\"ErrorCode\": \"ajf9fhp84h94whpwh89pfh99\", \"ErrorDescription\": \"'Name' field is required for CreateContact\"}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "View a contact profile",
   "probe": "well-formed id that does not exist",
   "outcome": "400 {\"ErrorCode\": \"tibcezwecrotubagfetiteluwocucfoc\", \"ErrorDescription\": \"Could not find ContactId \\\"4134730000000000000000000000000\\\".\"}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create a contact",
   "probe": "bad enum value",
   "outcome": "400 {\"ErrorCode\": \"8n4vu9ve7t8opn3QVR\", \"ErrorDescription\": \"Error with 'SortBy' field: Newest is not an accepted value. Accepted values include: Relevance, FirstName, LastName, CompanyName, DateCreat",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Set up pipeline stages",
   "probe": "bad color value",
   "outcome": "400 {\"ErrorCode\": \"342lk09808kljdfnlk\", \"ErrorDescription\": \"NotAColor is not a valid color. Please enter a valid color string or hexadecimal value for your status color.\"}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create a follow-up task on a record",
   "probe": "misspelled optional parameter (DueDtae)",
   "outcome": "200 {\"TaskId\": \"4134734108559384309819337217081\"}",
   "grade": "silent",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create a company",
   "probe": "repeat the same company create",
   "outcome": "400 {\"ErrorCode\": \"kasdj3h3ljkh89slklj89\", \"ErrorDescription\": \"A company with this name already exists. You can't have two companies with the same name, so please choose a different name. If you're t",
   "grade": "clear",
   "idempotent": "yes",
   "rate_limit": null
  },
  {
   "capability": "Create a contact",
   "probe": "repeat the same contact create",
   "outcome": "200 {\"ContactId\": \"4134734119090169332898277249320\"}",
   "grade": "silent",
   "idempotent": "no",
   "rate_limit": null
  },
  {
   "capability": "View a contact profile",
   "probe": "wrong API key",
   "outcome": "400, content-type text/html, empty body (no error code, no message)",
   "grade": "silent",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "View a contact profile",
   "probe": "burst of 15 GetUser calls",
   "outcome": "200 {\"statuses\": [200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200], \"ratelimit_headers\": []}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": "none-seen"
  },
  {
   "capability": "Create a lead / pipeline item",
   "probe": "pipeline item on a contact that does not exist; check no half-made item",
   "outcome": "400 {\"ErrorCode\": \"dfhjkhkj34h5lkj2h3j\", \"ErrorDescription\": \"Could not find ContactId \\\"4134730000000000000000000000000\\\".\"}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "View a contact profile",
   "probe": "revoked API key",
   "outcome": "400 {\"ErrorCode\":\"lulasihihrihwumhemalhoewwuvzikuf\",\"ErrorDescription\":\"Invalid credentials. Please make sure your authentication is correct.\"}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  }
 ],
 "surface_audit": {
  "totals": {
   "items": 100,
   "documented": 85,
   "safe": 84,
   "exercised": 77,
   "passed": 77,
   "skipped": 16,
   "blocked": 7,
   "not_run": 0,
   "match": 75,
   "drift": 2,
   "broken_doc": 0,
   "docs_complete": 2,
   "docs_partial": 83,
   "docs_missing": 0,
   "errors_clear": 1,
   "errors_vague": 1,
   "errors_silent": 0
  }
 },
 "coverage_core": 100,
 "coverage_own": 100,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 5,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": false
 },
 "methodology": 42,
 "rules_date": "2026-10-30",
 "engine": {
  "model": "claude-opus-5-5",
  "driver": 5,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "skip",
  "version": "2026.10.27",
  "commit": "132c4d41a411d7acee60092fedfe2af74cee1ec3",
  "prompts": {
   "version": "2026.10.27",
   "commit": "845036a5a40ff8a1d6d9ed752a31210bed0cbc93"
  },
  "rules": {
   "version": "2026.10.27",
   "commit": "fe3b689b94a4f5fc8abd3c7adc454960326b9514"
  }
 },
 "same_level_drives": 1,
 "drives": 1,
 "same_stop_drives": 1,
 "works_assisted": null,
 "freshness": "fresh",
 "newer_drives": null,
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": null,
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "in"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-28"
  },
  "browser": {
   "state": "in",
   "measured": false
  },
  "our_key": "verified",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "API docs at https://account.lessannoyingcrm.com/api_docs/v2/ (one POST endpoint, Function + Parameters), linked from llms.txt; no OpenAPI, no markdown versions."
  },
  "signup": {
   "status": "browser",
   "note": "Web form at account.lessannoyingcrm.com/signup/ (name, email, password; no CAPTCHA) then a 3-step onboarding; asked for an industry; our agent answered. No API or CLI sign-up.",
   "way": "email_password"
  },
  "verify": {
   "status": "browser",
   "note": "Verification mail arrived within a minute at the agentdrives.com address; the link opened in the browser and confirmed the address. The CRM already worked before verifying."
  },
  "credentials": {
   "status": "browser",
   "note": "API key only from Settings > Programmer API: Enable API, then Create a new API key with Read/Create/Edit/Delete scopes, shown once. No API to create, list or revoke keys.",
   "via": ""
  },
  "first_call": {
   "status": "headless",
   "note": "POST https://api.lessannoyingcrm.com/v2/ GetUser with the key -> 200 with our user.",
   "route": "account"
  },
  "first_action": {
   "status": "headless",
   "note": "CreateContact (IsCompany=true) made a company; GetContact read it back."
  },
  "pay": {
   "status": "browser",
   "grade": "P2",
   "rails": [
    "Paddle inline card checkout"
   ],
   "rail_ids": [
    "paddle"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "no-card trial",
   "route": "card_checkout",
   "checkout": {
    "reached": "plan_page",
    "processor": "paddle",
    "captcha": "none",
    "three_ds": "not_seen",
    "card_form": false,
    "phone_field": "none",
    "wallets": [],
    "rail_offer": "none",
    "price": "15.00",
    "currency": "USD",
    "period": "month",
    "plan": "Monthly billing (per user)",
    "last_button": ""
   },
   "person": "none",
   "ours": "no_card",
   "note": "30-day trial with no card. The billing page offers $15 per user per month or $180 per user per year. Choosing Monthly opens a Paddle inline checkout asking for email, country and ZIP. Paddle refused our fixed test ZIP 00000 (\"You need to enter a valid postal code.\"), and this drive has no card, so the card form was not reached. No payment went through. No 402 on the product's domain, and no x402, MPP, Stripe Projects or billing API."
  },
  "cancel": {
   "status": "n/a",
   "note": "Nothing to cancel: our agent started no paid plan.",
   "docs_note": "Nothing to cancel: the drive used the no-card trial. Docs: \"Head to your Billing Settings page and click to cancel your subscription\" (web UI only).",
   "docs_grade": "",
   "nothing": "no_plan"
  },
  "delete": {
   "status": "browser",
   "note": "Settings > Close account (reason and two checkboxes) -> \"Your account has been canceled.\" A new login was refused with \"Your account has been closed.\" It is a web page only; the data is archived for a year and purged earlier only on request to support.",
   "left": "stuck",
   "after_hours": null,
   "account": true
  }
 },
 "routes": [
  {
   "route": "email_password",
   "offered": "seen",
   "tried": true,
   "not_tried": null,
   "result": "in",
   "wall": null,
   "person": "none",
   "brings": "inbox",
   "fresh": true,
   "minutes": 4,
   "browser": true
  },
  {
   "route": "sso_google",
   "offered": "seen",
   "tried": false,
   "not_tried": "policy",
   "result": null,
   "wall": null,
   "person": null,
   "brings": null,
   "fresh": null,
   "minutes": null,
   "browser": null
  },
  {
   "route": "oauth_consent",
   "offered": "documented",
   "tried": false,
   "not_tried": "no_kit",
   "result": null,
   "wall": null,
   "person": null,
   "brings": null,
   "fresh": null,
   "minutes": null,
   "browser": null
  },
  {
   "route": "sso_microsoft",
   "offered": "seen",
   "tried": false,
   "not_tried": "policy",
   "result": null,
   "wall": null,
   "person": null,
   "brings": null,
   "fresh": null,
   "minutes": null,
   "browser": null
  },
  {
   "route": "sso_apple",
   "offered": "seen",
   "tried": false,
   "not_tried": "policy",
   "result": null,
   "wall": null,
   "person": null,
   "brings": null,
   "fresh": null,
   "minutes": null,
   "browser": null
  }
 ],
 "checkout": {
  "reached": "plan_page",
  "processor": "paddle",
  "captcha": "none",
  "three_ds": "not_seen",
  "phone_field": "none",
  "rail_offer": "none",
  "period": "month",
  "card_form": false,
  "price": "15.00",
  "currency": "USD",
  "plan": "Monthly billing (per user)"
 },
 "docs": {
  "at": "2026-10-28",
  "read": 54,
  "listed": 55,
  "sampled": false,
  "overall": "gaps",
  "getting_started": "found",
  "auth": "found",
  "errors": "partial",
  "examples": "some",
  "freshness": "fresh",
  "newest": "2026-10-28",
  "core_pages": "4 of 8",
  "capabilities": "gaps",
  "label": "Some gaps"
 },
 "claims": {
  "claimed": 8,
  "tried": 8,
  "held": 7,
  "broken": 1,
  "unclear": 0,
  "not_tried": 0,
  "undocumented_works": 0
 },
 "pay_options": {
  "checked": "2026-10-28",
  "source": "probe",
  "options": [],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": true,
   "card_required": null,
   "free_plan": null
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": false,
  "cli": false,
  "sdk": false,
  "mcp": "third-party",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "urls": {
  "docs": null,
  "llms_txt": "https://cdn.prod.website-files.com/5eb25de94cee6c29635fe867/6877cf8b59d5a5c711e7407e_LLMs.txt",
  "mcp": null
 },
 "surface_notes": {
  "api": "RPC-style JSON API, one POST endpoint, 79 documented functions",
  "mcp": "third-party only (lacrm-mcp on npm, 1.9.3)",
  "webhooks": "documented; setup needs an HTTPS receiver that echoes X-Hook-Secret"
 },
 "surface_sizes": [
  {
   "kind": "api",
   "listed": 79,
   "tested": 76
  }
 ],
 "can_do": [
  "Create, edit, search and delete contacts and companies through the API",
  "Create pipelines and stages, add leads and move them between stages through the API",
  "Create, edit and list follow-up tasks, notes, logged emails and calendar events on a contact through the API",
  "Create custom fields and groups and add contacts to them through the API",
  "Upload a file to a contact through the API",
  "Export all contacts to CSV from the web app",
  "Add a team member, set their permissions and lock them out in the web app",
  "Close the account in the web app"
 ],
 "cannot_do": [
  {
   "what": "Get an API key without the web app",
   "why": "Keys are created only on the Programmer API settings page; no API or CLI for keys"
  },
  {
   "what": "Sign up without a browser",
   "why": "Only the web form (or Google, Microsoft, Apple sign-in)"
  },
  {
   "what": "Register a webhook from a plain script",
   "why": "Setup needs an HTTPS receiver that echoes the X-Hook-Secret handshake"
  },
  {
   "what": "Share an intake form publicly on the trial",
   "why": "Public forms need a paid account"
  },
  {
   "what": "Save default event reminders",
   "why": "The Save default reminders button sent no request in our agent's browser; per-event reminders work"
  },
  {
   "what": "Read reports through the API",
   "why": "Reports are web pages only; the API has the raw lists"
  }
 ],
 "blockers": [
  "API key creation is web-only (Settings > Programmer API)",
  "Sign-up is a web form only"
 ],
 "tips_for_agents": [
  "Call POST https://api.lessannoyingcrm.com/v2/ with JSON {\"Function\": ..., \"Parameters\": {...}} and the raw key in the Authorization header (no 'Bearer').",
  "Create the key once in Settings > Programmer API with only the scopes you need; it is shown once.",
  "Companies are CreateContact with IsCompany=true and a unique Company Name; there is no CreateCompany.",
  "GetPipelineItems only returns items in active statuses unless you pass StatusFilter.",
  "Contact filters use internal names (Title for Job Title); a bad name gets a clear 400.",
  "Verify deletes with the list calls (GetTasks, GetEvents): Get by id still returns deleted tasks and events.",
  "Misspelled parameters are silently ignored: read back what you wrote.",
  "Event attendees go in Attendees [{IsUser, AttendeeId, AttendanceStatus}]; GetEvents lists only events the user attends."
 ],
 "selfhost": null,
 "edge_case": "none",
 "summary": "An agent can run Less Annoying CRM's core work through its documented JSON API: contacts, companies, pipelines and stages, leads and stage moves, and follow-up tasks all went through create, read, update, use and delete, repeated in three trials. A few lines in the first trial failed through the drive's own mistakes and passed when repeated, and a deleted task can still be read by its id. Getting in needs the agent's own browser twice: the sign-up web form (no CAPTCHA, no card, 30-day trial) and the settings page that creates the API key. Paying is a Paddle card checkout that stopped before the card form, and the agent closed the account on a web page.",
 "wall": "API keys only from the web settings page",
 "plan_scope": "no-card trial",
 "robots_stop": null,
 "robots": {
  "rule": "star",
  "step": null,
  "seen": "2026-10-28",
  "held": false
 },
 "terms": null,
 "terms_read": "2026-10-28",
 "email_gate": null,
 "plain": {
  "summary": "Less Annoying CRM is a simple customer-management tool with a JSON API. An agent did all of the core work (contacts, companies, leads, stages, tasks) through that API on its own. It needed its own browser to sign up and to create the API key, and checkout stopped before a card was entered.",
  "can_do": [
   "Create, edit, find and delete contacts and companies through the API",
   "Create pipelines and stages, add leads and move them between stages through the API",
   "Create, edit and list follow-up tasks through the API",
   "Add notes, logged emails, events, custom fields, groups and files to contacts through the API",
   "Export contacts, add a team member and close the account in the web app"
  ],
  "cannot_do": [
   {
    "what": "Create an API key without the web app",
    "why": "Keys can only be made on a settings page, with no API or command line."
   },
   {
    "what": "Sign up without a browser",
    "why": "Sign-up is a web form only."
   },
   {
    "what": "Register a webhook from a plain script",
    "why": "It needs a web address that answers a secret handshake; the test had none."
   },
   {
    "what": "Share an intake form publicly on the trial",
    "why": "Public forms need a paid account."
   },
   {
    "what": "Read reports through the API",
    "why": "Reports exist only as web pages."
   }
  ]
 },
 "plan_gated": [
  {
   "capability": "Build an intake form that auto-creates CRM records (public sharing)",
   "plan": "paid account",
   "evidence": "Share form -> \"only paid Less Annoying CRM accounts can share forms publicly. You can test this form yourself\""
  }
 ],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "capability": "Create a contact",
   "weight": "core",
   "plan": "trial",
   "surfaces": {
    "api": "POST /v2 CreateContact",
    "mcp": null,
    "cli": null,
    "ui": "Contacts"
   },
   "check": "GET /v2 GetContact returns the new contact id and fields",
   "capability_id": "cap_w95e954c",
   "source": "https://www.lessannoyingcrm.com/tour; https://account.lessannoyingcrm.com/api_docs/v2/Getting_Started/Introduction",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-02",
   "capability": "Update a contact",
   "weight": "core",
   "plan": "trial",
   "surfaces": {
    "api": "POST /v2 EditContact",
    "mcp": null,
    "cli": null,
    "ui": "Contacts > Contact profile"
   },
   "check": "GET /v2 GetContact shows the edited field value",
   "capability_id": "cap_5w1hq959",
   "source": "https://www.lessannoyingcrm.com/tour",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-03",
   "capability": "View a contact profile",
   "weight": "core",
   "plan": "trial",
   "surfaces": {
    "api": "GET /v2 GetContact",
    "mcp": null,
    "cli": null,
    "ui": "Contacts > Contact profile"
   },
   "check": "Contact profile page shows unified notes, files, tasks and events",
   "capability_id": "cap_ejde63qk",
   "source": "https://www.lessannoyingcrm.com/tour",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-04",
   "capability": "Create a company",
   "weight": "core",
   "plan": "trial",
   "surfaces": {
    "api": "POST /v2 CreateCompany",
    "mcp": null,
    "cli": null,
    "ui": "Contacts > Company linking"
   },
   "check": "GET /v2 GetContact for the company id returns the created company",
   "capability_id": "cap_shxrg99w",
   "source": "https://www.lessannoyingcrm.com/tour (Company linking)",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-05",
   "capability": "Create a lead / pipeline item",
   "weight": "core",
   "plan": "trial",
   "surfaces": {
    "api": "POST /v2 CreatePipelineItem",
    "mcp": null,
    "cli": null,
    "ui": "Leads > Lead tracking"
   },
   "check": "GET /v2 GetPipelineItem returns the new lead with its pipeline stage",
   "capability_id": "cap_0504r89v",
   "source": "https://www.lessannoyingcrm.com/tour (Leads)",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-06",
   "capability": "Set up pipeline stages",
   "weight": "core",
   "plan": "trial",
   "surfaces": {
    "api": "POST /v2 CreatePipelineStatus / EditPipeline",
    "mcp": null,
    "cli": null,
    "ui": "Leads > Pipeline management"
   },
   "check": "GET /v2 GetPipelineReport shows the custom stages defined",
   "capability_id": "cap_pw8afps2",
   "source": "https://www.lessannoyingcrm.com/tour (Pipeline management)",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-07",
   "capability": "Update a deal or move its pipeline stage",
   "weight": "core",
   "plan": "trial",
   "surfaces": {
    "api": "POST /v2 EditPipelineItem",
    "mcp": null,
    "cli": null,
    "ui": "Leads > Pipeline management"
   },
   "check": "GET /v2 GetPipelineItem shows the updated stage",
   "capability_id": "cap_m8f5a2vy",
   "source": "https://www.lessannoyingcrm.com/tour (Pipeline management)",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-08",
   "capability": "Create a follow-up task on a record",
   "weight": "core",
   "plan": "trial",
   "surfaces": {
    "api": "POST /v2 CreateTask",
    "mcp": null,
    "cli": null,
    "ui": "Tasks"
   },
   "check": "GET /v2 GetTasks or the daily agenda email lists the created task",
   "capability_id": "cap_76387ph3",
   "source": "https://www.lessannoyingcrm.com/ (Set tasks and get reminders); https://www.lessannoyingcrm.com/tour (Automated follow-up reminders)",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-09",
   "capability": "Create a calendar event",
   "weight": "secondary",
   "plan": "trial",
   "surfaces": {
    "api": "POST /v2 CreateEvent",
    "mcp": null,
    "cli": null,
    "ui": "Calendars"
   },
   "check": "GET /v2 GetEvents shows the created event on the contact's profile",
   "capability_id": "cap_mvcwvbp7",
   "source": "https://www.lessannoyingcrm.com/tour (Calendars)",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-10",
   "capability": "Connect an external calendar (Google/Outlook sync)",
   "weight": "secondary",
   "plan": "trial",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Calendars > Google & Outlook sync"
   },
   "check": "Calendar settings page shows the connected Google or Outlook account syncing two-way",
   "capability_id": "cap_z6yx50xs",
   "source": "https://www.lessannoyingcrm.com/tour (Google & Outlook sync)",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-11",
   "capability": "Set up booking reminders and follow-ups (event reminders)",
   "weight": "secondary",
   "plan": "trial",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Calendars > Event reminders"
   },
   "check": "Event settings show the configured email/text reminder before the event",
   "capability_id": "cap_7ev5z1t0",
   "source": "https://www.lessannoyingcrm.com/tour (Event reminders)",
   "result": "done",
   "via": "browser",
   "done_on": [
    "browser"
   ]
  },
  {
   "id": "cap-12",
   "capability": "Log a note or activity on a record",
   "weight": "secondary",
   "plan": "trial",
   "surfaces": {
    "api": "POST /v2 CreateNote",
    "mcp": null,
    "cli": null,
    "ui": "Contacts > Contact activity logs"
   },
   "check": "GET /v2 GetNotes shows the timestamped note on the contact history",
   "capability_id": "cap_105mz0vz",
   "source": "https://www.lessannoyingcrm.com/ (Timestamp notes and sync emails); https://www.lessannoyingcrm.com/tour (Contact activity logs)",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-13",
   "capability": "Send an email from the CRM / log email communications",
   "weight": "secondary",
   "plan": "trial",
   "surfaces": {
    "api": "POST /v2 CreateEmail",
    "mcp": null,
    "cli": null,
    "ui": "Contacts > Email logging"
   },
   "check": "GET /v2 GetContact shows the logged email in the contact's chronological history",
   "capability_id": "cap_rfj89t0b",
   "source": "https://www.lessannoyingcrm.com/tour (Email logging)",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-14",
   "capability": "Create a custom field on a record type",
   "weight": "secondary",
   "plan": "trial",
   "surfaces": {
    "api": "POST /v2 CreateCustomField",
    "mcp": null,
    "cli": null,
    "ui": "Contacts > Unlimited custom fields"
   },
   "check": "GET /v2 GetCustomFields lists the created field and it appears on the contact form",
   "capability_id": "cap_pd8aa77r",
   "source": "https://www.lessannoyingcrm.com/tour (Unlimited custom fields)",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-15",
   "capability": "Create a list, segment or saved view (groups)",
   "weight": "secondary",
   "plan": "trial",
   "surfaces": {
    "api": "POST /v2 CreateGroup",
    "mcp": null,
    "cli": null,
    "ui": "Contacts > Unlimited groups"
   },
   "check": "GET /v2 GetGroups shows the created group and its members",
   "capability_id": "cap_hkwr9742",
   "source": "https://www.lessannoyingcrm.com/tour (Unlimited groups)",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-16",
   "capability": "Search CRM records",
   "weight": "secondary",
   "plan": "trial",
   "surfaces": {
    "api": "POST /v2 SearchContacts / SearchPipelineItems",
    "mcp": null,
    "cli": null,
    "ui": "Contacts > Contact search"
   },
   "check": "Search results page returns the matching contact by name or stored detail",
   "capability_id": "cap_j1x1a2f4",
   "source": "https://www.lessannoyingcrm.com/tour (Contact search)",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-17",
   "capability": "Read CRM reports (filtered, activity, task, pipeline)",
   "weight": "secondary",
   "plan": "trial",
   "surfaces": {
    "api": "GET /v2 GetPipelineReport",
    "mcp": null,
    "cli": null,
    "ui": "Reporting"
   },
   "check": "Reporting page renders a filtered report for a chosen stage, rep or date range",
   "capability_id": "cap_t84377te",
   "source": "https://www.lessannoyingcrm.com/tour (Filtered contact reports, Activity reports, Pipeline reports)",
   "result": "done",
   "via": "browser",
   "done_on": [
    "browser"
   ]
  },
  {
   "id": "cap-18",
   "capability": "Export CRM data to a spreadsheet or PDF",
   "weight": "secondary",
   "plan": "trial",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Reporting > One-click data exports"
   },
   "check": "A downloaded export file contains the current contact or report data",
   "capability_id": "cap_8zwmj5wn",
   "source": "https://www.lessannoyingcrm.com/tour (One-click data exports, Activity reports)",
   "result": "done",
   "via": "browser",
   "done_on": [
    "browser"
   ]
  },
  {
   "id": "cap-19",
   "capability": "Assign a contact or lead to a team member",
   "weight": "secondary",
   "plan": "trial",
   "surfaces": {
    "api": "POST /v2 EditContact (AssignedTo)",
    "mcp": null,
    "cli": null,
    "ui": "Team Management > Contact & lead assignments"
   },
   "check": "GET /v2 GetContact shows the assigned user on the record",
   "capability_id": "cap_q7g99tz1",
   "source": "https://www.lessannoyingcrm.com/tour (Contact & lead assignments)",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-20",
   "capability": "Set a member's role or visibility/access permissions",
   "weight": "secondary",
   "plan": "trial",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Team Management > Visibility & access permissions"
   },
   "check": "User settings page shows the configured read-only/no-access/edit permission for that record",
   "capability_id": "cap_bs3hvrpm",
   "source": "https://www.lessannoyingcrm.com/tour (Visibility & access permissions)",
   "result": "done",
   "via": "browser",
   "done_on": [
    "browser"
   ]
  },
  {
   "id": "cap-21",
   "capability": "Build an intake form that auto-creates CRM records",
   "weight": "secondary",
   "plan": "trial",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Contacts > Form builder"
   },
   "check": "A submitted form produces a new contact record with a triggered follow-up task",
   "capability_id": "cap_kch2ns0f",
   "source": "https://www.lessannoyingcrm.com/tour (Form builder)",
   "result": "partial",
   "via": "browser"
  },
  {
   "id": "cap-22",
   "capability": "Register a webhook",
   "weight": "secondary",
   "plan": "trial",
   "surfaces": {
    "api": "POST /v2 CreateWebhook",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "GET /v2 GetWebhooks lists the registered webhook and it fires on the configured event",
   "capability_id": "cap_977hxacb",
   "source": "https://account.lessannoyingcrm.com/api_docs/v2/Getting_Started/Introduction (Settings Functions: Webhooks; Using webhooks)",
   "result": "blocked",
   "via": "api"
  },
  {
   "id": "cap-23",
   "capability": "Create an API key",
   "weight": "secondary",
   "plan": "trial",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Account > API"
   },
   "check": "The generated API key authenticates a subsequent API call",
   "capability_id": "cap_wbg916v9",
   "source": "https://account.lessannoyingcrm.com/api_docs/v2/Getting_Started/Introduction (Ways to connect)",
   "result": "done",
   "via": "browser",
   "done_on": [
    "browser"
   ]
  },
  {
   "id": "cap-24",
   "capability": "Connect a third-party integration (Zapier, Mailchimp, calendars)",
   "weight": "secondary",
   "plan": "trial",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Integrations"
   },
   "check": "Integrations page shows the connected app as active",
   "capability_id": "cap_x4n6bnwy",
   "source": "https://www.lessannoyingcrm.com/ (Integrations section); https://www.lessannoyingcrm.com/tour (Integrations)",
   "result": "blocked",
   "via": "browser"
  },
  {
   "id": "cap-25",
   "capability": "Enable two-factor authentication",
   "weight": "peripheral",
   "plan": "trial",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Security > Two-factor authentication"
   },
   "check": "Account security settings show 2FA enabled via an authenticator, email or phone",
   "capability_id": "cap_9qz744jy",
   "source": "https://www.lessannoyingcrm.com/tour (Two-factor authentication)",
   "result": "done",
   "via": "browser",
   "done_on": [
    "browser"
   ]
  },
  {
   "id": "cap-26",
   "capability": "Set the brand logo and colours",
   "weight": "peripheral",
   "plan": "trial",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Team Management > Company branding"
   },
   "check": "Account branding settings show the uploaded logo and color theme applied",
   "capability_id": "cap_28j5w4mh",
   "source": "https://www.lessannoyingcrm.com/tour (Company branding)",
   "result": "done",
   "via": "browser",
   "done_on": [
    "browser"
   ]
  },
  {
   "id": "cap-27",
   "capability": "Restrict access by temporarily locking out a user",
   "weight": "peripheral",
   "plan": "trial",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Security > Temporarily lock out users"
   },
   "check": "Admin user list shows the locked-out teammate unable to log in",
   "capability_id": "cap_wrzp7nnm",
   "source": "https://www.lessannoyingcrm.com/tour (Temporarily lock out users)",
   "result": "done",
   "via": "browser",
   "done_on": [
    "browser"
   ]
  },
  {
   "id": "cap-28",
   "capability": "Use the CRM from a mobile browser",
   "weight": "peripheral",
   "plan": "trial",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Team Management > Mobile access"
   },
   "check": "The CRM loads and functions in a mobile browser session",
   "capability_id": "cap_p675qb2x",
   "source": "https://www.lessannoyingcrm.com/tour (Mobile access)",
   "result": "done",
   "via": "browser",
   "done_on": [
    "browser"
   ]
  }
 ],
 "stale": false,
 "unreachable_since": null,
 "not_driven_since": null,
 "icon": "/logos/lessannoyingcrm.png",
 "agent_kinds": {
  "browser": {
   "who": "An assistant in a browser",
   "passed": [
    "signup",
    "verify",
    "first_action"
   ],
   "stop": "pay",
   "why": null,
   "tone": "neutral",
   "text": "Signs up, confirms its email and does all of the core work. Payment wasn't tried."
  },
  "direct": {
   "who": "An agent talking to it directly",
   "passed": [],
   "stop": "signup",
   "why": "it works only in a browser",
   "tone": "wall",
   "text": "Stops at sign-up: it works only in a browser."
  }
 },
 "sdk": null,
 "surface_reach": null,
 "connect": {
  "signup": {
   "url": "https://account.lessannoyingcrm.com/signup/",
   "state": "tested"
  }
 },
 "surface_sources": {
  "docs": "https://cdn.prod.website-files.com/5eb25de94cee6c29635fe867/6877cf8b59d5a5c711e7407e_LLMs.txt",
  "llms_txt": "https://cdn.prod.website-files.com/5eb25de94cee6c29635fe867/6877cf8b59d5a5c711e7407e_LLMs.txt",
  "api": "https://account.lessannoyingcrm.com/api_docs/v2/Core_Functions/Contacts",
  "mcp": "https://www.npmjs.com/package/lacrm-mcp"
 },
 "copilot_connector": null,
 "stripe_directory": null,
 "in_stripe_directory": null,
 "stripe_projects": null,
 "pay_rails": [],
 "stop_evidence": {
  "at": "delete",
  "date": "2026-10-28",
  "line": "Settings > Close account (reason and two checkboxes) -> \"Your account has been canceled.\" A new login was refused with \"Your account has been closed.\" It is a web page only; the data is archived for a year and purged earlier only on request to support."
 },
 "wall_vendor": null,
 "mcp_sign_in": null,
 "safety_issues": 0,
 "fix_counts": {
  "small": 4,
  "medium": 4,
  "large": 0,
  "total": 8
 },
 "evidence_sha256": "e82d232d9a1ef9cc4759052f993fc64e1bc156243bfb64d06dfbcd7ce83990e6",
 "first_seen": "2026-10-28",
 "license": {
  "name": "CC BY 4.0",
  "url": "https://creativecommons.org/licenses/by/4.0/"
 },
 "correction": {
  "status": "none",
  "open": 0,
  "since": null,
  "reply_by": null
 },
 "attribution": null,
 "confirmation": {
  "state": "awaiting",
  "drives": 1,
  "agree": 1,
  "review": null,
  "text": "1 drive, awaiting confirmation"
 },
 "stop_shot": null,
 "stop_shot_hash": null,
 "attempts_count": 186,
 "detail": {
  "public": false,
  "in": [
   "report",
   "api"
  ],
  "since": "2026-10-17"
 },
 "what_it_does": "Less Annoying CRM is a simple customer-management tool with a JSON API.",
 "kind": "product",
 "rules_version": "rules-2026-10-30-42",
 "rules_url": "https://agentdrives.com/method/changelog#rules-2026-10-30-42",
 "category_median": null,
 "peers": {
  "DOCS-08": {
   "basis": "category",
   "n": 10,
   "below": 6,
   "above": 0,
   "quartile": 4
  },
  "DOCS-10": {
   "basis": "category",
   "n": 10,
   "below": 0,
   "above": 6,
   "quartile": 1
  },
  "DOCS-11": {
   "basis": "category",
   "n": 10,
   "below": 7,
   "above": 0,
   "quartile": 4
  },
  "ERR-01": {
   "basis": "category",
   "n": 7,
   "below": 0,
   "above": 0
  },
  "ERR-02": {
   "basis": "category",
   "n": 7,
   "below": 3,
   "above": 0
  },
  "ERR-03": {
   "basis": "category",
   "n": 7,
   "below": 2,
   "above": 2
  },
  "ERR-04": {
   "basis": "all",
   "n": 36,
   "below": 0,
   "above": 12,
   "percentile": 33
  },
  "ERR-07": {
   "basis": "category",
   "n": 6,
   "below": 0,
   "above": 2
  },
  "FIND-06": {
   "basis": "category",
   "n": 8,
   "below": 3,
   "above": 0
  },
  "IN-03": {
   "basis": "category",
   "n": 6,
   "below": 1,
   "above": 0
  },
  "IN-08": {
   "basis": "category",
   "n": 11,
   "below": 0,
   "above": 4,
   "quartile": 2
  },
  "IN-11": {
   "basis": "category",
   "n": 11,
   "below": 8,
   "above": 0,
   "quartile": 4
  },
  "IN-12": {
   "basis": "category",
   "n": 11,
   "below": 7,
   "above": 0,
   "quartile": 4
  },
  "LEAVE-03": {
   "basis": "category",
   "n": 10,
   "below": 5,
   "above": 0,
   "quartile": 4
  },
  "LIM-02": {
   "basis": "all",
   "n": 48,
   "below": 0,
   "above": 21,
   "percentile": 28
  },
  "PROTO-02": {
   "basis": "category",
   "n": 8,
   "below": 0,
   "above": 1
  }
 },
 "probe": {
  "checked": "2026-11-01",
  "status": "ok",
  "sign_up_page": "page",
  "wall": "none",
  "llms_txt": true,
  "mcp": "none",
  "openapi": false,
  "payment_402": null,
  "payment_rails": [],
  "files": {
   "openapi": {
    "url": null,
    "found": false
   },
   "llms_txt": {
    "url": "https://cdn.prod.website-files.com/5eb25de94cee6c29635fe867/6877cf8b59d5a5c711e7407e_LLMs.txt",
    "found": true
   },
   "llms_full": {
    "url": null,
    "found": false
   }
  }
 },
 "probe_history": [
  {
   "checked": "2026-11-01",
   "status": "ok",
   "sign_up_page": "page",
   "wall": "none",
   "llms_txt": true,
   "mcp": "none",
   "openapi": false,
   "payment_402": null,
   "payment_rails": []
  },
  {
   "checked": "2026-10-31",
   "status": "ok",
   "sign_up_page": "page",
   "wall": "none",
   "llms_txt": true,
   "mcp": "none",
   "openapi": false,
   "payment_402": null,
   "payment_rails": []
  },
  {
   "checked": "2026-10-30",
   "status": "ok",
   "sign_up_page": "page",
   "wall": "none",
   "llms_txt": true,
   "mcp": "none",
   "openapi": false,
   "payment_402": null,
   "payment_rails": []
  },
  {
   "checked": "2026-10-29",
   "status": "ok",
   "sign_up_page": "page",
   "wall": "none",
   "llms_txt": true,
   "mcp": "none",
   "openapi": false,
   "payment_402": null,
   "payment_rails": []
  }
 ],
 "surface_changes": [],
 "agent_reports": null,
 "verdict": "L4 · Runs on its own: our agent got in on its own, with no stop on the way in and no bot check met. The sign-up form had no CAPTCHA, and both sign-up and the API key page in Settings needed its browser. Through the documented JSON API it created, read, updated and deleted contacts, companies, pipelines, leads and tasks. The trial needs no card. At the Paddle checkout, the postal code field answered \"You need to enter a valid postal code.\" and no payment went through. Nothing needed cancelling because our agent started no paid plan. It closed the account on a web page.",
 "changes": {
  "source": "store",
  "drives": [
   {
    "run": "20261028T020456Z",
    "date": "2026-10-28",
    "level": 4,
    "stop": "delete",
    "entry": "self-start",
    "driver": 5,
    "listed": true,
    "paid": false,
    "agent_paid": null
   }
  ],
  "events": [
   {
    "property": "stop",
    "before": null,
    "after": "delete",
    "cause": "method",
    "before_run": "20261028T020456Z",
    "after_run": "20261028T020456Z",
    "at": "2026-10-28",
    "methodology": 42,
    "methodology_before": 41,
    "rules_version": "rules-2026-10-30-42",
    "rules_url": "https://agentdrives.com/method/changelog#rules-2026-10-30-42"
   }
  ],
  "feed": "https://agentdrives.com/api/tools/lessannoyingcrm/changes.json"
 },
 "agreement": null,
 "method_release": "2026-Q4.27",
 "found": {
  "agent_blockers": 2,
  "surface_issues": 2
 },
 "agent_surfaces": {
  "api": {
   "state": "tested",
   "reachable": true,
   "documented": 79,
   "tested": 76,
   "source": "https://account.lessannoyingcrm.com/api_docs/v2/Core_Functions/Contacts"
  },
  "mcp": {
   "state": "documented",
   "reachable": null,
   "documented": null,
   "tested": null,
   "source": "https://www.npmjs.com/package/lacrm-mcp"
  },
  "cli": {
   "state": "none_found",
   "reachable": null,
   "documented": null,
   "tested": null,
   "source": null
  },
  "sdk": {
   "state": "none_found",
   "documented": null,
   "tested": null,
   "source": null
  },
  "docs": {
   "state": "tested",
   "documented": 55,
   "tested": 54,
   "source": "https://cdn.prod.website-files.com/5eb25de94cee6c29635fe867/6877cf8b59d5a5c711e7407e_LLMs.txt"
  },
  "payment": {
   "state": "none_found",
   "documented": null,
   "tested": null,
   "source": null
  }
 },
 "issues_found": 4,
 "rank": 1,
 "rank_of": 4,
 "rank_change": null,
 "rank_since": "2026-10-28",
 "links": {
  "category": [
   {
    "label": "Sales and customers",
    "href": "https://agentdrives.com/categories/sales"
   },
   {
    "label": "CRM",
    "href": "https://agentdrives.com/categories/crm"
   }
  ],
  "tasks": [
   {
    "label": "Create an API key",
    "href": "https://agentdrives.com/tasks/create-an-api-key"
   },
   {
    "label": "Set a member's role or permissions",
    "href": "https://agentdrives.com/tasks/set-a-member-s-role-or-permissions"
   },
   {
    "label": "Export data to a file",
    "href": "https://agentdrives.com/tasks/export-data-to-a-file"
   },
   {
    "label": "Search the account's content",
    "href": "https://agentdrives.com/tasks/search-the-account-s-content"
   },
   {
    "label": "Set the brand logo and colours",
    "href": "https://agentdrives.com/tasks/set-the-brand-logo-and-colours"
   },
   {
    "label": "Create a contact",
    "href": "https://agentdrives.com/tasks/create-a-contact"
   }
  ],
  "walls": [
   {
    "label": "Sign-up or key only in a browser",
    "href": "https://agentdrives.com/access/get-in/sign-up",
    "note": "our agent got in another way"
   }
  ],
  "vendors": [],
  "standards": [
   {
    "label": "MCP",
    "href": "https://agentdrives.com/standards/mcp",
    "note": "tools an agent can call"
   },
   {
    "label": "llms.txt",
    "href": "https://agentdrives.com/standards/llms-txt",
    "note": "its docs, listed for agents"
   }
  ],
  "steps": [
   {
    "label": "Find",
    "href": "https://agentdrives.com/access/find"
   },
   {
    "label": "Get in",
    "href": "https://agentdrives.com/access/get-in"
   },
   {
    "label": "Use",
    "href": "https://agentdrives.com/access/use"
   },
   {
    "label": "Pay",
    "href": "https://agentdrives.com/access/pay"
   },
   {
    "label": "Leave",
    "href": "https://agentdrives.com/access/leave"
   }
  ],
  "rivals": [
   {
    "label": "Attio",
    "href": "https://agentdrives.com/tools/attio",
    "slug": "attio",
    "level": 4
   },
   {
    "label": "Pipedrive",
    "href": "https://agentdrives.com/tools/pipedrive",
    "slug": "pipedrive",
    "level": 4
   },
   {
    "label": "Twenty",
    "href": "https://agentdrives.com/tools/twenty",
    "slug": "twenty",
    "level": 4
   }
  ],
  "compare": [],
  "rail": [
   {
    "label": "Watch this product",
    "href": "https://agentdrives.com/watch"
   },
   {
    "label": "Get the data",
    "href": "https://agentdrives.com/data#plans"
   }
  ]
 },
 "capability_matrix": [
  {
   "id": "cap-01",
   "name": "Create a contact",
   "core": true,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-02",
   "name": "Update a contact",
   "core": true,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-03",
   "name": "View a contact profile",
   "core": true,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-04",
   "name": "Create a company",
   "core": true,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-05",
   "name": "Create a lead / pipeline item",
   "core": true,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-06",
   "name": "Set up pipeline stages",
   "core": true,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-07",
   "name": "Update a deal or move its pipeline stage",
   "core": true,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-08",
   "name": "Create a follow-up task on a record",
   "core": true,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-09",
   "name": "Create a calendar event",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-10",
   "name": "Connect an external calendar (Google/Outlook sync)",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-11",
   "name": "Set up booking reminders and follow-ups (event reminders)",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "done"
   }
  },
  {
   "id": "cap-12",
   "name": "Log a note or activity on a record",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-13",
   "name": "Send an email from the CRM / log email communications",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-14",
   "name": "Create a custom field on a record type",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-15",
   "name": "Create a list, segment or saved view (groups)",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-16",
   "name": "Search CRM records",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-17",
   "name": "Read CRM reports (filtered, activity, task, pipeline)",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "done"
   }
  },
  {
   "id": "cap-18",
   "name": "Export CRM data to a spreadsheet or PDF",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "done"
   }
  },
  {
   "id": "cap-19",
   "name": "Assign a contact or lead to a team member",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-20",
   "name": "Set a member's role or visibility/access permissions",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "done"
   }
  },
  {
   "id": "cap-21",
   "name": "Build an intake form that auto-creates CRM records",
   "core": false,
   "result": "partial",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "partial"
   }
  },
  {
   "id": "cap-22",
   "name": "Register a webhook",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "blocked",
    "mcp": "none",
    "cli": "none",
    "ui": "none"
   }
  },
  {
   "id": "cap-23",
   "name": "Create an API key",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "done"
   }
  },
  {
   "id": "cap-24",
   "name": "Connect a third-party integration (Zapier, Mailchimp, calendars)",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "blocked"
   }
  },
  {
   "id": "cap-25",
   "name": "Enable two-factor authentication",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "done"
   }
  },
  {
   "id": "cap-26",
   "name": "Set the brand logo and colours",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "done"
   }
  },
  {
   "id": "cap-27",
   "name": "Restrict access by temporarily locking out a user",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "done"
   }
  },
  {
   "id": "cap-28",
   "name": "Use the CRM from a mobile browser",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "done"
   }
  }
 ],
 "category_place": {
  "category": "crm",
  "products": 13,
  "higher": 0,
  "same_level": 3,
  "as_of": "2026-10-31",
  "stop": null,
  "rivals_by": "level",
  "rivals": [
   "attio",
   "pipedrive",
   "twenty"
  ]
 },
 "page": "https://agentdrives.com/tools/lessannoyingcrm?via=api"
}