build_upload_state_updated

Learn about the BUILD_UPLOAD_STATE_UPDATED webhook event from App Store Connect. Fired when a build upload finishes processing, fails, or becomes ready for testing.

App Store ConnectBuilds
build_upload_state_updated

The BUILD_UPLOAD_STATE_UPDATED event fires when the processing state of an uploaded build changes. After you upload a build through Xcode or CI, Apple processes it — this event tells you when that processing completes, fails, or reaches a new state.


When does it fire?


This event triggers on build processing transitions:


  • Processing — Apple is processing the uploaded build
  • Failed — the build failed processing (common causes: missing entitlements, invalid provisioning, code signing issues)
  • Valid — the build passed processing and is ready for testing or submission
  • Invalid — the build was flagged as invalid during processing

Payload highlights


The payload carries the processing state and a reference to the buildUploads record — no build number and no version string. For failed builds it carries no failure reason either, so both the build details and the cause of a failure take an App Store Connect API call.


How Yeethook helps


Build processing can take anywhere from a few minutes to over an hour. Instead of refreshing App Store Connect, Yeethook posts to your team's channel the moment processing completes. If a build fails, your team knows immediately and can fix the issue.


Common use cases


  • Get notified when your CI build finishes processing on Apple's servers
  • Catch build processing failures before they block your release
  • Track build processing times across multiple apps
  • Alert QA when a new build is ready for TestFlight testing

Example payload

The entire change is a single newState value — this event carries no oldState and no build number. relationships.instance names the buildUpload record, so the build number, min OS and audience in the message all come from a follow-up API call.

{
  "data": {
    "type": "buildUploadStateUpdated",
    "id": "7c813492-9516-4c79-903e-224effdd57ac",
    "version": 1,
    "attributes": {
      "newState": "VALID"
    },
    "relationships": {
      "instance": {
        "data": {
          "type": "buildUploads",
          "id": "ad7e6298-2570-4ca6-b3cc-f81788e40bdc"
        }
      }
    }
  }
}

What it looks like in Slack

Success

Build 4821 valid

Build
4821
Processing
Valid
Min OS
17.0
Audience
App Store Eligible

The same event arrives with different values depending on what changed. Yeethook rewrites the headline to match:

  • PROCESSING→ Build 4821 processing
  • FAILED→ Build 4821 failed
  • INVALID→ Build 4821 invalid

Enrichment with p8 key

With a p8 key, Yeethook enriches this event with the build details, min OS version, uploaded date, and expiration date from the App Store Connect API.

Questions about build_upload_state_updated

Where does the build number in the notification come from?

Not from the webhook. relationships.instance holds a buildUpload ID, and Yeethook resolves it through the App Store Connect API with your p8 key to fill the Build field and the headline. Without a key the headline degrades to "Build valid" with no number at all.

Why does my message show a single New state row instead of a before and after?

Because this event only sends newState. Yeethook prints a State change row when a payload carries both old and new values and a New state row when it carries only the new one, and build uploads fall into the second case.

Does VALID mean the build is ready for TestFlight?

It means Apple finished processing the uploaded binary, which is a prerequisite rather than a green light. Availability to external testers is reported separately by BUILD_BETA_DETAIL_EXTERNAL_BUILD_STATE_UPDATED once beta review completes.

What is the difference between FAILED and INVALID in the message?

Yeethook maps both to a red cross at critical level, because either one means the upload will not ship. The payload carries no failure reason, so the cause still has to be read in App Store Connect.

Get this event in Slack or Discord

Connect Yeethook to receive build_upload_state_updated notifications in your team's Slack or Discord channels.

Get Started Free