Practical quickstart · verified 2026-10-28
Generate an llms.txt draft from a Shopify product feed
For store owners and ecommerce agencies that want a reviewable text index from an accessible Shopify or WooCommerce product feed.
Open Actor on Apify ↗See the real outputUse your own Apify account. This page does not execute a run or ask for your token.
1. Start with one target
A sampled product catalog, source HTTP evidence and an llms.txt draft. Review the draft before publishing it on your own store.
{
"store_url": "https://www.untuckit.com",
"max_products": 5
}$0.02 per delivered report containing at least one product, charged per report rather than per product. No billable dataset report for blocked or empty feeds. Applicable platform storage access charges may apply. Check current pricing.
2. Run with Python and a spending cap
Save the input JSON and the bounded Python runner in one directory. Set your existing Apify token locally, then run:
pip install requests
# Set APIFY_TOKEN in your environment; never paste it into this website.
python apify-bounded-run.py hirepulse/shopify-to-llms-generator shopify-to-llms-generator.json 0.03Show the Python runner
"""One bounded Apify run. Never retries a run-start request."""
import json, os, sys, time
from pathlib import Path
import requests
actor, input_path, cap = sys.argv[1], sys.argv[2], float(sys.argv[3])
if not 0 < cap <= 1:
raise SystemExit("Choose a positive event-charge cap up to $1 for this example.")
headers = {"Authorization": "Bearer " + os.environ["APIFY_TOKEN"]}
payload = json.loads(Path(input_path).read_text(encoding="utf-8"))
api = "https://api.apify.com/v2"
# This POST is deliberately not retried. If its response is lost, check
# Apify Console for the run before starting another one.
response = requests.post(api + "/actors/" + actor.replace("/", "~") + "/runs",
headers=headers, json=payload, params={"maxTotalChargeUsd": cap,
"timeout": 120, "memory": 512, "restartOnError": "false"}, timeout=35)
response.raise_for_status()
run = response.json()["data"]
print("Started run:", run["id"], flush=True)
deadline = time.monotonic() + 180
while run["status"] in {"READY", "RUNNING", "TIMING-OUT", "ABORTING"}:
if time.monotonic() >= deadline:
raise SystemExit("Polling stopped; inspect run " + run["id"] + " in Console.")
time.sleep(2)
response = requests.get(api + "/actor-runs/" + run["id"], headers=headers, timeout=35)
response.raise_for_status()
run = response.json()["data"]
if run["status"] != "SUCCEEDED":
raise SystemExit("Run " + run["id"] + " ended " + run["status"] + "; inspect logs.")
response = requests.get(api + "/datasets/" + run["defaultDatasetId"] + "/items",
headers=headers, params={"format": "json", "limit": 20}, timeout=35)
response.raise_for_status()
rows = response.json()
Path("result.json").write_text(json.dumps(rows, indent=2, ensure_ascii=False), encoding="utf-8")
if not rows:
print("No dataset rows. Inspect the run OUTPUT and logs for source diagnostics.")
else:
print("Saved", len(rows), "rows (up to 20) to result.json; review availability fields.")
Start the same run with cURL (Bash)
curl --fail-with-body -X POST "https://api.apify.com/v2/actors/hirepulse~shopify-to-llms-generator/runs?maxTotalChargeUsd=0.03&timeout=120&memory=512&restartOnError=false" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
--data @shopify-to-llms-generator.jsonThe response contains a run ID. Poll GET /v2/actor-runs/{runId}; after success, read /v2/datasets/{defaultDatasetId}/items. Do not repeat a start request after a timeout without checking Console.
3. Inspect an actual result
Selected fields from an owner validation run on 2026-10-28T09:51:36.755Z. Build UIbZf3heOD2LfAJJa. These are dated observations, not current counts or customer results.
{
"store_url": "https://www.untuckit.com",
"platform": "Shopify",
"crawl_status": "SUCCESS_SHOPIFY",
"products_indexed": 5,
"deployed": false,
"ucp_conformant": false,
"llms_txt_excerpt": "# Untuckit\n> Draft based on a sampled public catalog; review before publishing.\n\n## Sources\n- [Store](https://www.untuckit.com)\n\n## Sampled Products\n- [Full-Zip CPO Jacket](https://www.untuckit.com/products/raphael-boiled-wool): Currency unknown 158.00 (In Stock) — Like many timeless looks, this sharp jacket is inspired by a heritage military style: the wool jackets once worn by U.S. Navy Chief Petty Officers on patrol. The warm, supersoft wool blend offers just enough stretch to let you move comfortably all da\n- [Full-Zip CPO Jacket](https://www.untuckit.com/products/corwin): Currency unknown 158.00 (In Stock) — Like many timeless looks, this sharp jacket is inspired by a heritage military style: the wool jackets once worn by U.S. Navy Chief Petty Officers on patrol. The warm, supersoft wool blend offers just enough stretch to let you move comfortably all da\n- [Knit Overshirt - FINAL SALE](https://www.untuckit.com/products/garavelle-knit-overshirt-sky-captain): Currency unknown 45.00 (Out of Stock) — When it’s brisk but not freezing, our Knit Overshirts make easy, warm layers that look good over any tee or Henley. Yet, they're light enough to layer under a jacket. Featuring soft 100% cotton that's knit for an easy feel, throw on one for your next\n- [Performance Short-Sleeve Vandelay Shirt - FINAL SALE](https://www.untuckit.com/products/vandelay): Currency unknown 45.00 (Out of"
}Download sample and provenance
Use it in your workflow
Download LLMS_TXT_DRAFT from the run key-value store or read llms_txt in the report. Check product URLs and wording, then decide whether to publish the file yourself. The Actor never deploys to your website.
In n8n or Make, use the Apify integration with the Actor ID hirepulse/shopify-to-llms-generator and the same JSON input. Review the run charge cap in the integration before enabling a schedule. These steps are instructions; no live n8n or Make workflow was executed for this guide.
Know the limits
Protected or empty feeds can return diagnostics without a catalog report. The sample is capped at five products, not a full inventory. The Actor does not publish files, add checkout support or verify policies. An llms.txt file does not guarantee citations, AI visibility or sales.