The job queue in Business Central

How Business Central's job queue runs scheduled and background work — categories, parallelism, error handling, and operating discipline.

Updated 2026-07-05

Business Central's job queue is the scheduler that runs background tasks — nightly batch routines, scheduled report distributions, asynchronous integrations, long-running calculations that shouldn't block the user. Configured well, it's invisible infrastructure; configured badly, it's the source of mysterious "this didn't run" support tickets.

Job queue entries. A job queue entry is the schedule definition for one task. Each entry has:

  • Object Type — Codeunit, Report, or XMLport.
  • Object ID — which one to run.
  • Description — a human-readable name.
  • Earliest Start Date/Time — when the next run is scheduled.
  • Expiration Date/Time — when the schedule ends (blank for indefinite).
  • Recurring Job — yes or no.
  • Run On [Days] — which days of the week recurring jobs fire.
  • Starting / Ending Time — daily window for execution.
  • Status — Ready, In Process, Error, Finished, On Hold.
  • Maximum No. of Attemptsretry policy on failure.
  • Job Queue Category Code — for grouping and parallelism control.
  • User ID — the user context the job runs as.

Job queue categories. Categories let you group entries and control concurrent execution. By default all entries share the same category and can run in parallel up to the platform limit. Custom categories with concurrency limits (Max No. of Concurrent Jobs = 1) serialise long-running work that mustn't overlap — e.g. inventory cost adjustment, currency revaluation, complex MRP runs.

Errors and retries. A job that errors moves to Error status with the error message captured. The retry policy controls how many attempts run before final failure. Failed jobs are visible in the Job Queue Log Entries view with the full call stack for investigation.

Standard scheduled work. Common job queue uses:

  • Adjust Cost — Item Entries — nightly.
  • Post Inventory Cost to G/L — nightly after Adjust Cost.
  • Currency Exchange Rate Service — fetches daily rates.
  • Email reports — scheduled report runs that PDF and email to distribution lists.
  • Bank account reconciliation imports — pulls bank feeds.
  • Document send retries — for failed email deliveries.
  • Power Automate-triggered actions — many BC connectors create job queue entries internally.

Parallelism. A standard tenant runs several job queue threads in parallel. Long-running blocking jobs in one category don't block other categories. The configuration tunes the trade-off between throughput (more parallel) and resource pressure (fewer parallel).

User context. Each job runs as a specific user — important for permission and audit. Best practice: create a dedicated Job Queue Service Account user (a system user, not a person), assign appropriate permissions, and run all background jobs as that user. Avoids the messy "what happens when this user leaves" question.

Telemetry. Job queue runs emit Application Insights telemetry — start, finish, duration, error. Build alerts on long-running or repeatedly-failing jobs.

Common pitfalls.

  • Job that errors but doesn't recover — left in Error status indefinitely until someone notices. Build alerts on failed jobs.
  • Long-running job in a small window — the job starts but doesn't finish before the ending time and is rescheduled. Investigate duration vs window.
  • Permission-failing job — user lacks rights to a table the job touches. Audit the service-account user's permissions.
  • Conflicting jobs without category — two jobs that mustn't overlap run in parallel and corrupt state. Assign them to a serialised category.

Observability. Schedule a daily admin glance at the job queue. Most healthy tenants need only minutes; the alternative is the surprise call from a controller asking why nothing reconciled last month.

Related guides