I almost missed this one because the actor itself worked fine. The bug wasn't in the code, it was in the input form.
Looking at usage funnels across a portfolio of small data-fetching actors (Apify calls them Actors — serverless scrapers/API tools), one number stood out: for company-buying-signal-report, 5 people opened the input page, and only 1 actually ran it. Everywhere else in the funnel, the drop-off was gradual. Here it was a cliff.
The only clue was the input schema itself. The actor's one real input field was companies, an array of objects ({ domain, greenhouseSlug, leverSlug }), rendered by Apify's console as a raw JSON editor. Technically correct, since most people running this actor only care about one company at a time, and a blank JSON textarea is not exactly a welcoming way to ask for that.
The fix was small: add flat, single-item fields (domain, greenhouseSlug, leverSlug) alongside the existing array field. In the actor's code, the single fields take priority when filled in, and fall back to the array for anyone who does want to check multiple companies in one run.
const companies = singleDomain
? [{ domain: singleDomain, greenhouseSlug, leverSlug }]
: (companiesInput?.length ? companiesInput : defaultCompanies);
Once I saw it in one actor, I grepped the rest of the portfolio for the same pattern ("editor": "json" on an array-of-objects field with no matching single-item shortcut) and found four more actors with the exact same friction: a hiring tracker, a weather tracker, a risk-briefing tool, and a city council monitor. Same fix, same result, each verified live afterward.
None of this shows up in a code review. It only shows up when you look at where real people stop, not just whether the backend logic is correct.











