Shopify bulk operation return null value

I used bulkoperation as a main part to get all the product from the store. I get the bulk operation finish webhook from the shopify webhook.

{
  admin_graphql_api_id: 'gid://shopify/BulkOperation/4110336655408',
  completed_at: '2025-05-06T06:42:35-04:00',
  created_at: '2025-05-06T06:42:32-04:00',
  error_code: null,
  status: 'completed',
  type: 'query'
}

I got the status completed from the webhook. But when i fetch the url using:

query {
  node(id: "gid://shopify/BulkOperation/4110336655408") {
    ... on BulkOperation {
      url
      partialDataUrl
      fileSize
      errorCode
      url
      objectCount
      status
      rootObjectCount
    }
  }
}

It returns :

1 Like

Hey @Sabin_Bhattarai :waving_hand: - this is definitely odd. I was able to replicate this on my end. I’ll look into this and loop back with you when I have some next steps - thanks for flagging this!

Hi @Sabin_Bhattarai - are you running this in GraphiQL or an app?

@Liam-Shopify, when I create the same flow using the GraphQL app, it provides me with the URL. However, when I try to implement the same logic from the app, it returns a null response.previously it provides me url but now it returns null.

Now i am using this query to get the url:

query {
  currentBulkOperation {
    id
    status
    errorCode
    createdAt
    completedAt
    objectCount
    fileSize
    url
    partialDataUrl
  }
}

Hey @Sabin_Bhattarai :waving_hand: - just following up on this, thanks very much for your patience on my reply here. This may be a potential issue on our end, and we’ve opened up an investigation on this internally.

We’ll keep you updated in this thread and reach out once we have more info.

Hey, is there any update on this?

Doing this in the Graphiql app always returns null:

query getCurrentBulkOperation($type: BulkOperationType) {
  currentBulkOperation(type: $type) {
    url
    status
    errorCode
    createdAt
    completedAt
  }
}

# ALSO

query pollBulkOperationProgress {
  node(id: "gid://shopify/BulkOperation/4946036490295") {
    ... on BulkOperation {
      fileSize
      status
      completedAt
      createdAt
      errorCode
      id
      objectCount
      partialDataUrl
      rootObjectCount
      type
      url
    }
  }
}

However, the query returns the expected data when my test runner queries it:

await graphql(admin, getCurrentBulkOperation, {}):

Returning:

{
  url: '....',
  status: 'COMPLETED',
  errorCode: null,
  createdAt: '2025-08-25T06:18:22Z',
  completedAt: '2025-08-25T06:18:23Z'
}

Also, I’m having issues with the webhook topic BULK_OPERATIONS_FINISH, unsure if its related. The store is subscribed to it. but the app doesn’t seem to receive it. If it is potentially related to it, this is one of the subscription IDs: 1292154306615.

Yes, this is the expected behavior. If you create the bulk operation from the GraphQL app and then query the data using its ID, it will return the exact details. However, if you create the bulk operation via the app and try to get the URL from the GraphQL app, it will always return null.

If you have correctly set up the BULK_OPERATIONS_FINISH webhook, it should definitely return the finished webhook with the ID. If not, please share some details about how you configured the webhook so that I can guide you further.

Hey, thanks for the info on this strange behaviour.

Regarding the webhook, it seems to be good now. I was subscribing to the webhook after starting the bulk operation. The bulk operation takes about 10 seconds, so it wasn’t being completed before the store could subscribe to the webhook. Anyways, subscribe to the webhook topic before starting the operation. Should probably make it app specific anyways.