# Tüm ürünleri bulk operation ile dışa aktarma

> Tüm Shopify ürünlerini ve varyantlarını bulkOperationRunQuery ile JSONL dosyasına aktarın, işlemi takip edin ve sonucu indirin.

Sayfa: https://lintelagency.com/tr/kaynaklar/graphql/tum-urunleri-toplu-disa-aktarma

## Kısaca

Shopify’dan tüm ürünleri dışa aktarmak için bulkOperationRunQuery mutation’ı ile bir bulk operation başlatın, durumu COMPLETED olana kadar bulkOperation sorgusuyla takip edin, ardından url alanındaki JSONL dosyasını indirin. Bulk operation’lar büyük aktarımlarda sayfalama ve istek sınırlarıyla uğraştırmaz. Her satır bir kayıttır; varyantlar, ait oldukları ürünü gösteren bir __parentId taşır.

## Bilgiler

- **API:** Admin GraphQL API
- **İşlemler:** bulkOperationRunQuery, bulkOperation
- **Erişim yetkisi:** read_products
- **Yerini aldığı REST çağrısı:** page_info ile sayfalanan GET /admin/api/products.json
- **API sürümü:** 2026-10
- **Son kontrol:** 2 Kasım 2026

## Nasıl kullanılır

1. StartProductExport mutation’ını, ürün sorgusunu query değişkenine koyarak gönderin. İhtiyacınız olan alanları bu sorgunun içine yazın; bağlantılar (connection) için first ya da after gerekmez.
2. Dönen bulk operation ID’sini saklayın ve birkaç saniyede bir ProductExportStatus ile durumu sorgulayın ya da bulk_operations/finish webhook’una abone olun.
3. Durum COMPLETED olduğunda url’deki dosyayı indirin. Link bir hafta sonra geçerliliğini yitirir.
4. Dosyayı satır satır okuyun. Ürünleri, varyantlardaki __parentId ile yeniden bir araya getirin.

## Kod

### bulk-operation-run-query.graphql

```graphql
mutation StartProductExport($query: String!) {
  bulkOperationRunQuery(query: $query) {
    bulkOperation {
      id
      status
    }
    userErrors {
      field
      message
    }
  }
}
```

### bulk-operation-run-query.variables.json

```json
{
  "query": "{ products { edges { node { id handle title status vendor productType tags variants { edges { node { id sku price inventoryQuantity } } } } } } }"
}
```

### bulk-operation-run-query.response.json

```json
{
  "data": {
    "bulkOperationRunQuery": {
      "bulkOperation": {
        "id": "gid://shopify/BulkOperation/1234567890",
        "status": "CREATED"
      },
      "userErrors": []
    }
  }
}
```

### bulk-operation-status.graphql

```graphql
query ProductExportStatus($id: ID!) {
  bulkOperation(id: $id) {
    id
    status
    errorCode
    objectCount
    fileSize
    url
    partialDataUrl
  }
}
```

### bulk-operation-status.variables.json

```json
{
  "id": "gid://shopify/BulkOperation/1234567890"
}
```

### bulk-operation-status.response.json

```json
{
  "data": {
    "bulkOperation": {
      "id": "gid://shopify/BulkOperation/1234567890",
      "status": "COMPLETED",
      "errorCode": null,
      "objectCount": "2483",
      "fileSize": "1048576",
      "url": "https://storage.googleapis.com/shopify-tiers-assets-prod-us-east1/bulk-operation-outputs/example.jsonl",
      "partialDataUrl": null
    }
  }
}
```

### result.jsonl

```text
{"id":"gid://shopify/Product/1111111111","handle":"linen-shirt","title":"Linen shirt","status":"ACTIVE","vendor":"Your Brand","productType":"Shirts","tags":["summer"]}
{"id":"gid://shopify/ProductVariant/2222222222","sku":"LS-S","price":"49.00","inventoryQuantity":12,"__parentId":"gid://shopify/Product/1111111111"}
{"id":"gid://shopify/ProductVariant/3333333333","sku":"LS-M","price":"49.00","inventoryQuantity":0,"__parentId":"gid://shopify/Product/1111111111"}
```

## Sınırlar ve özel durumlar

- Bir uygulama aynı anda en fazla beş bulk sorgu işlemi çalıştırabilir.
- Durum FAILED ise nedeni errorCode’da yazar; partialDataUrl, hatadan önce aktarılan veriyi içerebilir.
- objectCount ve fileSize, bir JavaScript sayısından büyük olabildikleri için metin (string) olarak döner.
- Bir bulk sorgusunda iç içe bağlantılar en fazla iki seviye olabilir.

## Sorular

### Tüm Shopify ürünlerini GraphQL ile nasıl dışa aktarırım?

Bir products sorgusuyla bulkOperationRunQuery kullanın, işlemin tamamlanmasını bekleyin, ardından url alanındaki JSONL dosyasını indirin. Birkaç yüz ürün için normal, sayfalanmış bir products sorgusu da iş görür.

### Sonuç neden JSON değil de JSONL?

Tüm aktarımı belleğe yüklemeden satır satır okunabilmesi için. Varyantlar gibi alt kayıtlar, __parentId taşıyan ayrı satırlardır.

### Aktarıma metafield’ları ekleyebilir miyim?

Evet. Ürün düğümünün içine metafields { edges { node { namespace key value } } } ekleyin; her metafield, ürünü __parentId olarak gösteren ayrı bir satır olur.

## Shopify belgeleri

- [Perform bulk operations with the GraphQL Admin API](https://shopify.dev/docs/api/usage/bulk-operations/queries)
- [bulkOperationRunQuery](https://shopify.dev/docs/api/admin-graphql/latest/mutations/bulkOperationRunQuery)

## İlgili içerikler

- [Shopify stoğunu başka bir sistemle senkron tutmak](https://lintelagency.com/tr/blog/shopify-stok-senkronizasyonu)
- [Shopify’a geçiş: neler bozulur, nasıl planlanır?](https://lintelagency.com/tr/blog/shopifya-tasirken-neler-bozulur)

Lisans: MIT. Kendi mağazanızda da müşteri işlerinizde de ücretsiz kullanabilirsiniz.
