The Media Upload API queues a set of photo changes for one Google Business Profile location and applies them gradually in the background. Google accepts only about 10 edits per minute per profile, so a site owner saving a full gallery can't be served by immediate writes. Queue the changes instead and let them apply at Google's pace.
Use this API when there's more than a handful of photos. For a single photo, use the Create Media and Delete Media methods of the Locations API, which write to the Business Profile immediately.
Anything you can read from List Media Uploads is either still waiting to be applied or has failed. A change that succeeds leaves nothing behind, so an empty list means the queue finished and everything worked.
Read the response as a whole:
| What comes back | What it means |
|---|---|
Anything PENDING or UPLOADING | Still working. Don't report results yet. |
Only FAILED items | Finished, and those items didn't make it. |
| Nothing | Nothing is outstanding for this location. |
An empty queue is not proof of success: a cleared failure and a success look identical afterwards. Confirm the final gallery against the Locations API's List Media method rather than inferring success. Failures stay in the queue until they're dismissed with Dismiss Media Upload Failures, and queuing new changes clears every failure for that location, whoever queued it, so read failures before queuing again.
The same budget of roughly 10 edits per minute covers every write to the profile, not
just photos. The Locations API's Update Google Location and Update Location Attributes
methods draw on it too, so interleaving those with photo changes brings a 429 closer.
Pace the profile as a whole rather than each method separately.
batchId): the group of changes queued by one Bulk Create Media Uploads
call. Useful for troubleshooting, since one save can produce more than one batch.Last updated: 27 August 2026