HubSpot's developer test accounts expire after ninety days without an API call, are capped at ten per account, and cannot sync data with any other account (HubSpot account types). A standard sandbox does copy production, but copying is optional and capped at the five thousand most recently updated contacts, and event data on records is not copied. So the account an agent is tested in is either a stand in with none of your records or a capped copy that starts aging the day it is made, and neither can be reset between runs or broken on purpose. The HubSpot world is a stateful HubSpot mock built for testing agents: the same URLs, the same errors and the same state machine as the real API, on your machine, verified against the real system.
HubSpot developer test account limits
An agent that works a CRM needs the records it will meet in production: the contact with two companies, the deal that sat in the same stage for a quarter, the sequence that already enrolled someone. A test account has none of that, and a sandbox has a sample of it that stops matching production the moment it is created. Both accumulate the leftovers of every run. A world is a pseudonymized copy of your own portal, taken when you ask for it: the same contacts, companies and deals, the same pipelines and stages, under new names. Every run starts from those bytes, in milliseconds, and ends by throwing the world away.
A stateful HubSpot mock: contacts, deals, pipelines, sequences
The world keeps contacts, companies and deals with their properties, the associations between them, pipelines with their stages, tasks, notes and sequence enrollments. It keeps HubSpot's rules with them. A deal belongs to one pipeline and moves through that pipeline's stages; a stage from another pipeline is refused with the real error. A contact enrolled in a sequence cannot be enrolled in it twice. A property with a fixed set of options refuses a value outside the set. A merge keeps one record and removes the other, and the diff shows which one. Everything the agent creates or changes stays in the world, so the second request sees what the first one did.
Test your AI agent against HubSpot
Point the agent's HubSpot client at the world. Nothing in the agent changes. The path is three commands: the first copies the portal and writes the worlds folder, the second turns your own queue export into tasks, one per row, with the expected outcome on the rows where you know it, and the third runs the agent three times on fresh copies and writes the report. The three steps take about ten minutes; the GET ACCESS form on this page is where the HubSpot world starts.
Grade what the agent did, not what it said
A run starts from a mark and ends with a diff: every deal stage moved, every amount changed, every contact created, merged or enrolled, every property written. The transcript says the duplicate contact was merged; the diff shows the one with the deal history gone. The transcript says the deal was moved to closed won; the diff shows the stage unchanged and a note added. Where the portal carries money, a deal amount rewritten or a discount applied past its limit, the diff says so in dollars. The report gives every task a verdict and a reason, and replays the worst run to the byte.
Break it on purpose
HubSpot limits requests per ten seconds and per day, and an agent working a queue will hit the limit at the worst moment. In the world that moment is on your schedule: a 429 on every third call, an outage mid run, a slow API, an expired token, a webhook that arrives twice. Does the retry logic enroll the contact twice? Does the agent report the deal updated when the call never landed? Then move the clock, so the follow up tasks come due and the sequences fire, and read the diff again.
HubSpot test environment for agents, in CI
The same command that runs on a laptop is the CI step the first command wrote. No test account to renew, no sandbox to recreate: the world starts fresh inside the job, the agent runs every task, the report is the artifact, and nothing leaves the machine. Every world in the catalog takes the same path; Salesforce, Intercom and Stripe are three more of them, and the docs are the path in full.