Use a dedicated async speech-to-text provider for the audio leg — file in, job id back, webhook when it's done — and treat everything after the transcript as a second job with its own contract. For long recordings (hour-long support calls, supplier review calls, podcast episodes), the number that decides whether the pipeline pays for itself is rarely word error rate. It's per-field accuracy on the structured record you build afterwards. Any batch audio transcription API worth shortlisting already handles hour-long files, async jobs and webhook callbacks; that part is table stakes now. The extraction on top is where the money leaks.

The system here is deliberately unglamorous: a small game studio reconciling supplier invoices against recorded vendor calls. Art outsourcing, localization houses, QA contractors. The PDF invoice says one thing, and the 90-minute call where the milestone got renegotiated says another, so finance wants six fields per call — supplier, PO number, milestone, amount, currency, due date — with a link back to the timestamp where each one was said.

That is a structured-output problem wearing an audio costume.

Why one prompt over a whole recording loses invoice fields