Methodology

How we compare

VoicePicks publishes independent comparisons of AI voice agents. This version starts with AI receptionists and answering services for small businesses: a static reading of one snapshot, 30 services and 82 plans, with date_checked of October 14, 2026 on every record. Loading a page does not call a vendor site, and VoicePicks does not sell these services.

Where the rows come from

The site is generated from src/data/receptionists.json. src/data/receptionists.csv is the same snapshot with one row per plan. The build checks that the two files list the same services, plan names, monthly figures, included amounts, and overage text.

Verification badges

Each service has a verified field. The badge is that field, copied across:

Last verified is date_checked. The source label is source. When that value is a URL, the label is the hostname and the link is the URL. When it is a sentence, the sentence is the label.

What is printed as stored

How a monthly price is chosen for sorting

The comparison table and the category lists need one number per service. That number is the smallest parsed monthly amount on the service. It is a reading aid. The plans table on each service page is the record.

Home-page picks use the same reader, then keep verified services whose lowest monthly amount is above $0, three per category.

How these recorded values are read

RecordStored monthly_usdShown asUsed as
Upfirst · Starter24.95$24.95monthly
Sameday AI · Launchfrom 449from 449monthly
Synthflow · Enterprisefrom $30,000/yrfrom $30,000/yrper-year
JustCall AI Voice Agent · AI voice agent$0.15 (per min, unit implied)$0.15 (per min, unit implied)per-minute
Allo · Solo seat + AI Receptionist42 (10 seat + 32 agent, yearly)42 (10 seat + 32 agent, yearly)monthly
Numa · Customcontact salescontact salesunparsed

The service name for each plan is on its own page. These rows are the stored plan values, not a new price.

Categories

The home page groups services with a rule on the type string:

The comparison table can filter on that group and on the original type string.

Filters

Cost at 200 calls

The column uses 200 calls a month. A plan counts only when monthly_usd is an exact number, the included text states a call allowance (or unlimited calls), and any calls past that allowance have a single per-call overage. The service cell is the lowest such total.

Upfirst’s computed figure is $159.95: Pro: $159.95 monthly includes 300 calls, so 200 calls adds $0..

Rosie’s plans are in minutes, so its 200-call cost is n/a. No plan here has an exact monthly price and a call allowance that reaches 200 calls. Minute, credit, customer, daily-cap, and contact-sales plans stay n/a.

Sourced fields

HIPAA, languages, call transfer, and booking are objects with value, source, andevidence. true and false are shown as Yes and No. The stringunknown stays unknown. When source is an http URL, the hostname is a link. Evidence, when present, sits in a collapsed disclosure. These fields were enriched on 2026-10-15. date_checked for the price snapshot remains October 14, 2026.

Integrations is a list of names, each with its own source URL when one was recorded. An empty list is “none recorded.” A name with an http source is a link to that page.

The older features object is still printed as feature notes. It is separate from the sourced HIPAA, languages, call transfer, booking, and integrations fields.

Trade pages

target_industries is a list of trade slugs. A service is on a trade page only when that slug is in the list. target_industries_sources stores the vendor page for each listed slug, and the trade page links it. The earlier free-text label is target_industries_text and is shown as a subline. Matching is the slug itself, so “auto-repair” is not inferred from a sentence about auto shops.

Vs pages

Ten pairs repeat the stored fields in two columns, including plans, notes, the sourced HIPAA, languages, call transfer, booking, and integrations values, the trade slugs with their vendor links, and the 200-call cost. The pages do not add a winner.

Missed-call calculator

The calculator uses only the numbers typed into it:

  1. Missed calls = calls/mo × (percent missed ÷ 100)
  2. Lost jobs = missed calls × (close rate ÷ 100)
  3. Missed-call revenue = lost jobs × average job value

At exactly 200 calls, it also shows missed-call revenue minus each computed 200-call cost. That difference is arithmetic. It is not a prediction that the service would save the calls.

Submit or claim

The listing form opens an email to a placeholder address, or copies the text. It does not store a submission. A Formspree action can be added later by setting the form action to a form id you create.

Pricing is being verified

19 services are verified from a vendor page, 5 are partial, and 6 are unverified. The note at the top of every page stays up while partial and unverified rows are in the snapshot. Notes stored on a service are shown on that service’s page.

Open the comparison table · Affiliate disclosure