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.
Top comments (1)
The "5 opened, 1 ran" cliff is such a clean signal. Nothing in the logs says "confused by a JSON editor"; it only shows up as silence. One more from the same family: required fields with no example value. A placeholder like
stripe.comin the domain field does more than a paragraph of docs. Did the flat fields change anything for the people who used the array, or did everyone switch to single-item runs?