Passive, reproducible recon · four findings · 2026-07-14
This is an honest read of ABM's public surface as any facility buyer, enterprise procurement team, or AI agent encounters it: gathered passively, no probing, no authentication. It credits a genuinely-ahead baseline first, then names four opportunities that trace to one primitive EcoWealth builds: tamper-evident, machine-verifiable proof of work done. Under the ruthless-evidence bar, each finding leads with a URL + HTTP status + the exact re-check command.
Two things most large enterprises still don't do, ABM already does. It ships a real /llms.txt: curl -sI https://www.abm.com/llms.txt returns 200, text/plain, ~146 KB, 598 lines (not a soft-200 SPA shell: actual content). And its email authentication is fully enforced: _dmarc.abm.com is p=reject (the strongest policy) and its SPF ends in -all (hardfail), fronted by Agari. The homepage returns a clean 200. The findings below are the layer above a genuinely good baseline: how to turn "ABM tells AI what it is" into "ABM proves what it did."
No jargon — what each fix below is worth to ABM in work won, kept, and grown.
Today a buyer's AI reading your site can't tell landscaping from microgrids, so a 116-year market leader looks generic to the exact procurement tools now shortlisting vendors — a structured capability layer means the work you'd win on merit isn't lost because a machine couldn't see your services.
Across 113,000 workers, proof that a scope was completed rests on paperwork a client must take on trust; a tamper-evident receipt they can replay themselves settles SLA disputes on evidence and becomes the strongest asset you carry into a re-bid.
Your grounds and microgrid crews are already on-site doing outdoor work; a restore packet on the same visit becomes a funded, tCO2e-receipted outcome under your sustainability commitments — new revenue from labor you're already deploying.
Your “Advancing Sustainability” pages read well but an auditor or agent can't check a single outcome; a settled proof-of-outcome receipt makes each claim verifiable — and you're further along than most, so it completes rather than restarts the work.
The findings
What an agent gets
A 598-line list of - [Page title](url): description: every page ABM has, flattened. It answers "what URLs exist," not "what services does ABM sell, where, with what proof."
Why it matters
An enterprise buyer's AI asked "does ABM do microgrids? landscaping? in Charlotte?" has no structured capability object to read: it must scrape prose, exactly the problem llms.txt was meant to solve.
The precise, reproducible state: the /llms.txt has zero capability sections: grep -cE '^##' returns 0 (it's an auto-generated sitemap-as-markdown, one flat bullet list). And structured data doesn't fill the gap: every service page's JSON-LD (the invisible structured labels search engines and AIs read) is only the generic graph. On /solutions/service-family/landscape-turf and /solutions/service-line/commercial-janitorial-cleaning, the only @types present are Organization, WebSite/WebPage, SearchAction, ContactPoint, ImageObject: no Service, Offer, or hasOfferCatalog. From structured data alone, an agent literally cannot distinguish "ABM does landscaping" from "ABM does microgrids."
$ curl -sI https://www.abm.com/llms.txt | grep -iE 'HTTP|content-type|content-length' HTTP/2 200 content-type: text/plain # ~146 KB, 598 lines: real file $ curl -s https://www.abm.com/llms.txt | grep -cE '^##' 0 # zero capability sections: flat auto-generated link dump $ curl -s https://www.abm.com/solutions/service-family/landscape-turf \ | grep -oE '"@type"[ ]*:[ ]*"[^"]*"' | sort | uniq -c 2 "@type": "Organization" 1 "@type": "WebSite" 1 "@type": "WebPage" 1 "@type": "SearchAction" 1 "@type": "ImageObject" 1 "@type": "EntryPoint" # no Service / Offer / hasOfferCatalog anywhere
The fix EcoWealth brings: a structured capability layer above the file ABM already publishes: an llms.txt with real ## Services / ## Industries / ## Verify us sections, plus Service/Offer JSON-LD on the pages that describe them. Drafted in the Agent Kit.
ABM's product is labor performed at a place: janitorial, engineering, HVAC/mechanical, electrical & lighting, parking, landscape & turf, mission-critical. Across ~113,000 people and 350+ offices, the record that a scope was completed, a night's cleaning, a grounds visit, a preventive-maintenance round, is a timesheet and an inspection form. Genuine, but self-attested: an enterprise client or their auditor can't independently verify a service was performed without trusting ABM's own system. That is exactly the shape of an EcoWealth work packet.
Today
"Prove the lobby was cleaned at 2am and the grounds serviced Thursday." → a report the client takes on trust; SLA disputes settle on paperwork.
With a proof layer
A photo+GPS+timestamp+signature packet → a tamper-evident receipt the client replays independently. SLA disputes settle on evidence; the receipt becomes a renewal asset.
Why EcoWealth fits: our primitive is precisely a proof-verified, tamper-evident, on-chain-settled service receipt: live on Base mainnet for our own work library. It converts a self-attested timesheet into something a Fortune-500 facilities buyer verifies themselves. Shown in the demo.
ABM already fields crews doing ecological-adjacent labor at scale: landscape & turf and grounds maintenance (a live service line: /solutions/service-family/landscape-turf returns 200), plus the ATS / Technical Solutions segment's eMobility, EV-charging, and microgrid lines (microgrid the fastest-growing in FY2025). These crews are already on-site, already doing outdoor work. A Restore-ladder packet, native/pollinator planting, stormwater/tree-well care, soil and litter transects, is the same crew, the same visit, with an added bounded scope and a proof receipt that carries a tCO2e mapping.
Why it's low-friction
No new workforce: the grounds crew servicing a corporate campus adds a bounded restore scope on the same visit: claim → do → photo+GPS+sign → settle.
Why it compounds
Every settled restore packet is a citable, tCO2e-receipted outcome under ABM's "Advancing Sustainability" commitments: proof, not a paragraph.
This finding rides on Findings 1–2: grounds-to-restore only becomes an asset once there's a structured capability door (F1) and a verifiable service receipt (F2). Together they make ABM's own crews a restore-ladder on-ramp.
ABM's Corporate Responsibility / Advancing Sustainability pages return 200 and read well, but they're prose commitments, with no structured or on-chain proof-verified outcome object an agent or auditor can check. And while the discovery llms.txt exists, the action + verification layer above it doesn't: /.well-known/agent-card.json (the file that lets an AI assistant use you correctly), /ai.txt, and /.well-known/security.txt are all 404. (Small tell: robots.txt Disallow: /ai-agent-training: a live 200 page ABM keeps out of the crawl, so agents are on the roadmap; the card + MCP (the protocol that lets an AI assistant call your tools) layer is the natural next step.)
$ for p in .well-known/agent-card.json ai.txt .well-known/security.txt; do \
curl -s -o /dev/null -w "$p %{http_code}\n" https://www.abm.com/$p; done
.well-known/agent-card.json 404 ai.txt 404 .well-known/security.txt 404
$ curl -s https://www.abm.com/robots.txt | grep -i ai-agent
Disallow: /ai-agent-training # live 200 page, kept out of crawl
$ dig +short TXT _dmarc.abm.com
"v=DMARC1; p=reject; …" # enforced: credit (baseline)
Framed as opportunity: ABM is already further along than most: it has the discovery file and the email posture. Adding an agent card + MCP tools + a proof-of-outcome receipt under the sustainability commitments completes a stack ABM has clearly started building.
Evidence log: every claim, re-runnable
| # | Claim | Reproduction command | Result observed 2026-07-14 |
|---|---|---|---|
| base | llms.txt is a real 200 file (~146KB, text/plain) | curl -sI https://www.abm.com/llms.txt | 200 · text/plain · 146,520 bytes |
| base | Email auth enforced: DMARC p=reject, SPF -all | dig +short TXT _dmarc.abm.com ; dig +short TXT abm.com | p=reject; fo=1 ; SPF ends -all |
| 1 | llms.txt has 0 capability sections (flat dump) | curl -s https://www.abm.com/llms.txt | grep -cE '^##' | 0 |
| 1 | Service pages carry no Service/Offer schema | curl -s https://www.abm.com/solutions/service-family/landscape-turf | grep -oE '"@type"[ ]*:[ ]*"[^"]*"' | sort | uniq -c | only Organization/WebSite/WebPage/SearchAction/ContactPoint/ImageObject |
| 2 | ~113,000 employees; $8.75B revenue FY2025; NYSE: ABM | Public reporting (FY2025 8-K / investor data) | Confirmed order-of-magnitude |
| 3 | Landscape & turf is a live service line | curl -s -o /dev/null -w "%{http_code}" https://www.abm.com/solutions/service-family/landscape-turf | 200 |
| 4 | agent-card.json / ai.txt / security.txt all 404 | for p in .well-known/agent-card.json ai.txt .well-known/security.txt; do curl -s -o /dev/null -w "$p %{http_code}\n" https://www.abm.com/$p; done | 404 404 404 |
| 4 | robots disallows a live /ai-agent-training page | curl -s https://www.abm.com/robots.txt | grep -i ai-agent ; curl -s -o /dev/null -w "%{http_code}" https://www.abm.com/ai-agent-training | Disallow: /ai-agent-training ; page itself 200 |
Facility services is won on capability legibility and kept on trusted proof of performance: both are exactly what EcoWealth makes machine-verifiable.
Enterprise RFPs + capability statements + past-performance. An AI-answered RFP that can't read ABM's capabilities from structured data under-represents a 116-year-old market leader.
EWP plug: structured capability layer (F1)113k distributed workers across 350+ offices; performance captured as timesheets + inspections: self-attested, not independently verifiable.
EWP plug: tamper-evident service receipts (F2)SLA performance + client audit + re-competes. Proof a client verifies themselves is the strongest possible renewal asset.
EWP plug: proof-verified audit trail (F2, F4)eMobility + microgrid (ATS) is the growth story; "Advancing Sustainability" is the license-to-operate frame.
EWP plug: tCO2e-receipted restore outcomes (F3, F4)Today
With the Kit + Protocol
Not "let's talk." One bounded first step, a rounding error against $8.75B, that returns a verifiable receipt tied to ABM's "Advancing Sustainability" commitment.
Point any ABM agent at our live work-packet endpoint (standard x402, a web-native way for AI agents to pay per use, keyless). It returns a real work-packet object, the structured capability layer above the llms.txt you already ship, working in one call.
Fund one restore packet at a property an ABM grounds crew already services; completion is photo+GPS+signature and it settles on-chain as a receipt the client verifies. The deliverable is the receipt.
One enterprise account, proof-verified service receipts alongside the normal timesheet → a tamper-evident audit trail ABM can put in the next RFP. Fixed, reversible, proof before scale.
Why now: your service quality is a timesheet a client must trust (F2). Each option ends in a receipt they verify themselves: the differentiator at renewal.
The through-line
The findings are the layer above a strong base: structured capability data over the llms.txt ABM already ships (F1), tamper-evident proof-of-service for 113k workers (F2), grounds crews one step from restore work (F3), and proof-of-outcome under real sustainability commitments (F4).