Bir tarih aralığındaki siparişleri bulk operation ile dışa aktarma

Belirli bir tarih aralığındaki tüm Shopify siparişlerini satır kalemleriyle birlikte bulkOperationRunQuery ve orders filtresiyle JSONL dosyasına aktarın.

API
Admin GraphQL API
İşlemler
bulkOperationRunQuery, bulkOperation
Erişim yetkileri
read_orders; 60 günden eski siparişler için ek olarak read_all_orders
Yerini aldığı REST çağrısı
created_at_min ve created_at_max ile GET /admin/api/orders.json
API sürümü
2026-10
Son kontrol

Kısaca

Bir tarih aralığındaki siparişleri dışa aktarmak için created_at filtresi içeren bir orders sorgusunu bulkOperationRunQuery mutation’ına verin, durum COMPLETED olana kadar bulkOperation sorgusuyla takip edin ve url’deki JSONL dosyasını indirin. Satır kalemleri, __parentId taşıyan ayrı satırlar olarak gelir. Uygulamanızın read_orders yetkisine, 60 günden eski siparişler için ayrıca read_all_orders yetkisine ihtiyacı vardır.

Nasıl kullanılır

  1. orders sorgusunu created_at:>=2026-07-01 AND created_at:<2026-10-01 gibi bir arama filtresiyle yazın. İçine yalnızca ihtiyacınız olan alanları koyun.
  2. Sorguyu StartOrderExport’un query değişkeni olarak gönderin ve dönen bulk operation ID’sini saklayın.
  3. Durum COMPLETED olana kadar birkaç saniyede bir OrderExportStatus ile sorgulayın ya da bulk_operations/finish webhook’una abone olun.
  4. url’deki dosyayı indirip satır satır okuyun. Her satır kalemini __parentId ile siparişine bağlayın.

Kod

bulk-operation-run-query.graphql
mutation StartOrderExport($query: String!) {
  bulkOperationRunQuery(query: $query) {
    bulkOperation {
      id
      status
    }
    userErrors {
      field
      message
    }
  }
}
bulk-operation-run-query.variables.json
{
  "query": "{ orders(query: \"created_at:>=2026-07-01 AND created_at:<2026-10-01\", sortKey: CREATED_AT) { edges { node { id name createdAt displayFinancialStatus displayFulfillmentStatus currencyCode totalPriceSet { shopMoney { amount currencyCode } } lineItems { edges { node { id sku quantity originalUnitPriceSet { shopMoney { amount } } } } } } } } }"
}
bulk-operation-run-query.response.json
{
  "data": {
    "bulkOperationRunQuery": {
      "bulkOperation": {
        "id": "gid://shopify/BulkOperation/1234567890",
        "status": "CREATED"
      },
      "userErrors": []
    }
  }
}
bulk-operation-status.graphql
query OrderExportStatus($id: ID!) {
  bulkOperation(id: $id) {
    id
    status
    errorCode
    objectCount
    rootObjectCount
    url
    partialDataUrl
  }
}
bulk-operation-status.variables.json
{
  "id": "gid://shopify/BulkOperation/1234567890"
}
bulk-operation-status.response.json
{
  "data": {
    "bulkOperation": {
      "id": "gid://shopify/BulkOperation/1234567890",
      "status": "COMPLETED",
      "errorCode": null,
      "objectCount": "15872",
      "rootObjectCount": "4210",
      "url": "https://storage.googleapis.com/shopify-tiers-assets-prod-us-east1/bulk-operation-outputs/example.jsonl",
      "partialDataUrl": null
    }
  }
}
result.jsonl
{"id":"gid://shopify/Order/1111111111","name":"#1001","createdAt":"2026-07-01T08:14:22Z","displayFinancialStatus":"PAID","displayFulfillmentStatus":"FULFILLED","currencyCode":"EUR","totalPriceSet":{"shopMoney":{"amount":"98.00","currencyCode":"EUR"}}}
{"id":"gid://shopify/LineItem/2222222222","sku":"LS-M","quantity":2,"originalUnitPriceSet":{"shopMoney":{"amount":"49.00"}},"__parentId":"gid://shopify/Order/1111111111"}

Lintel tarafından yazıldı. MIT lisansı: kendi mağazanızda da müşteri işlerinizde de ücretsiz kullanabilirsiniz.

Sınırlar ve özel durumlar

  • read_all_orders olmadan yalnızca son 60 günde oluşturulan siparişler döner. Herkese açık uygulamalar bu yetki için Shopify onayı ister; Dev Dashboard’da kendi organizasyonunuzun mağazaları için oluşturulan uygulamalar istemez.
  • Aralığın saniyesine kadar kesin olması gerekiyorsa filtreye tarih yerine created_at:>='2026-07-01T00:00:00Z' gibi tam bir ISO 8601 zaman damgası yazın.
  • E-posta ve adres gibi müşteri alanları Shopify’ın korunan müşteri verisi (protected customer data) kurallarına tabidir. Bu alanları sorguya eklemeden önce erişim izni alın.
  • rootObjectCount yalnızca siparişleri sayar; objectCount satır kalemlerini de sayar.

Sık sorulan sorular

Shopify siparişlerini GraphQL ile tarihe göre nasıl dışa aktarırım?
created_at ile filtrelenmiş bir orders bağlantısıyla bulkOperationRunQuery çalıştırın, işlemin bitmesini bekleyin ve JSONL dosyasını indirin. Birkaç yüz sipariş için aynı filtreyle sayfalanan bir orders sorgusu yeterlidir.
Dışa aktarım neden 60 günde kesiliyor?
read_orders yalnızca son 60 günde oluşturulan siparişleri kapsar. Daha eski siparişleri okumak için yanına read_all_orders yetkisini de isteyin.
Oluşturulma tarihi yerine güncellenme tarihine göre filtreleyebilir miyim?
Evet. orders sorgusu updated_at ve processed_at filtrelerini de kabul eder; yalnızca değişen siparişleri alan artımlı senkronizasyonlar için uygundur.
JSONL dosyasını nasıl CSV’ye çeviririm?
Dosyayı satır satır okuyun, siparişleri id’ye göre bir map’te tutun, her satır kalemini __parentId ile siparişine ekleyin; ardından sipariş ya da satır kalemi başına bir CSV satırı yazın.
  • Gösterilen tarihte, 2026-10 sürümünün Admin veya Storefront API şemasıyla doğrulandı. İstek adresinizdeki sürümü kontrol edin.
  • Örneklerdeki ID’ler ve mağaza adresleri yer tutucudur. Kendi değerlerinizle değiştirin.
  • Admin API çağrıları uygulamanızdan bir erişim anahtarı (access token) ister. Admin API anahtarını asla vitrine ya da temaya koymayın.
  • MIT lisansı. Kodu kendi mağazanızda da müşteri işlerinizde de kullanabilirsiniz.

Mağazanız için kurulmasını, test edilmesini ve bakımını isterseniz: API entegrasyonları.

Geliştirmek istediğiniz bir şey mi var? Gelin, birlikte konuşalım.

Aynı anda sınırlı sayıda proje alıyoruz.

Gencer KarakayaShopify mühendisi

Proje özetinizi bir mühendis okur; size e-postayla yanıt veririz.