What you can upload

What a listing needs

Rights & provenance

Then list it

  1. Upload the folder, a zip or the files at graunt.com/studio/refinery, and check what Studio proposes.
  2. Answer the permissions, confirm the name, description and rights basis, enter your price, tick the acceptance boxes and publish. Graunt emails you when the listing goes live. If it needs a change from you, Studio shows what to fix.
  3. Set up payouts at graunt.com/account#payments, which you need to be paid but not to list, and read graunt.com/fees for what Graunt takes.

Strong evidence vs. inadequate evidence

Rights and provenance

Known limitations

Freshness

Build it with your assistant

Paste this into ChatGPT, Claude or any assistant that reads files. It builds the folder and graunt/packet.json from your files and asks you for the rest.

I want to sell my data on Graunt (graunt.com). Package it as a ready packet: a folder Graunt can check and list without rewriting anything.

1. Build this folder:
   <packet-name>/
     graunt/packet.json   the listing declarations (format below)
     <source files>       my files, unchanged, in folders by what they show
   Graunt reads:
   - folder - a directory of your files, in folders by what they show
   - zip - a safe archive of the same (no traversal, no absolute paths, no symlinks)
   - tables - buyers get each file whole; for a CSV, TSV or JSON Lines file up to 256 MB, Graunt also lists the columns and gives the first rows a stable ID, so an agent can quote a row and point back to it; a larger file goes to the buyer as uploaded, and Graunt doesn't read its rows
   - source files - text, Markdown, CSV/TSV, JSON/JSONL, XML, YAML, HTML, PDF, Word (DOCX), Excel (XLSX), RTF, source code (Python, JavaScript, TypeScript, Go, Rust, Java and the rest of a repository, history as .patch), Jupyter notebooks (IPYNB), Parquet, audio (MP3, WAV, M4A, FLAC, OGG, AAC, OPUS), video (MP4, MOV, MXF, MTS, M2TS, TS, MPG, MPEG, M4V, WEBM, MKV, AVI, WMV, FLV, 3GP, INSV), images (PNG, JPG, GIF, WEBP, TIFF) and transcripts (SRT, VTT)

2. Write graunt/packet.json as one JSON object with these fields:
   - schema (required): the literal "graunt/packet-prefill/v1"
   - name (required): the packet's listing title (1-200 chars)
   - summary (required): what the packet contains and who it is for (1-2000 chars)
   - use_when: one sentence, at most 240 chars: the situation in which a buyer or an AI agent should reach for this packet
   - price.amount_cents (required): integer cents; 0 = free, paid must clear the paid order minimum
   - price.monthly_cents / price.annual_cents: subscription plan prices in integer cents; annual without monthly is the annual-only plan
   - rights.rights_basis (required): OWNED_ORIGINAL | GOVERNMENT_WORK | PUBLIC_DOMAIN | CC0 | LICENSED_REDISTRIBUTABLE | SYNTHETIC_SELF_GENERATED
   - rights.training_allowed (required): boolean - may buyers train models on this content
   - rights.ai_generation (required): whether an AI model generated any of the content: {"extent": "NONE"}, {"extent": "PARTIAL", "share_percent": 1-99, "description": "what part a model made"}, or {"extent": "FULL"} with an optional description of what made it. Not needed when rights_basis is SYNTHETIC_SELF_GENERATED, which already says FULL
   - rights.license_family / rights.citation_required: license family label and citation flag when applicable
   - provenance.source_url / provenance.publisher: where the material came from; strengthens the packet, never fabricated
   - tags / intended_uses: topic tags, and intended_uses naming one of ai_training, ai_reference, agent_tool, evaluation, analytics
   The file is complete when name, summary, price.amount_cents, rights.rights_basis, rights.training_allowed, and rights.ai_generation are all present and valid. Partial prefills still ingest - the Refinery flags exactly what is missing.

3. If my files include audio or video recordings, ask me whether I want these. None is required, and Graunt measures the hours itself. If I do, make them on my own computer with free tools (ffprobe, sha256sum, faster-whisper, PySceneDetect, ffmpeg), and put them in the folder:
   - <recording>.transcript.md (faster-whisper): beside the recording: one line per spoken passage, written as [hh:mm:ss] then the words, in the language spoken. An .srt or .vtt caption file with the recording's name works the same way. Graunt ties each passage to the recording and keeps your times
   - <video>.scenes.csv (PySceneDetect): beside the video: one row per scene with the columns scene, start_seconds, end_seconds, thumbnail. A CSV like any other: delivered and read as a table, and nothing more.
   - thumbnails/<video>-<scene>.jpg (PySceneDetect): one still image per scene, named in the scene list
   - samples/<recording>-sample.mp4 (or .mp3) (ffmpeg): a clip of about 30 seconds; the full recording stays unchanged
   - recordings.csv (sha256sum and ffprobe): one row per recording with the columns filename, sha256, duration_seconds, width, height (width and height left blank for audio). A CSV like any other: delivered and read as a table, and nothing more.
   Leave every recording itself unchanged. Write the commands for me to run if you cannot run them yourself.

4. Rules:
   - Ask me for what you cannot read from my files: the price, the rights basis, whether buyers may train on it, whether an AI model generated any of it, and where the material came from. Never guess rights or AI generation.
   - Do not write a license file or a rights statement for each file. Every sale on Graunt is under one License, my terms are my answers to the listing's permissions, and I give one rights basis for the listing.
   - The price is mine. Do not suggest one.
   - Use only facts from my files. Do not invent sources, dates, coverage or quality claims.
   - Write the summary for a buyer: who it is for and what job it does, then what is inside.
   - Fill use_when and intended_uses as well. When the file declares every listing field, Graunt lists the packet without drafting anything.
   - If a file is a scan, a picture of text or a recording, put its text in a .txt or .md file beside it. Graunt reads no text out of a ready packet's scans, images or recordings on its own, so the packet carries its own text.
   - Each file can be up to 100 GB, and the packet up to 1 TB and 10,000 files.

5. When you are done, give me graunt/packet.json as one JSON block and show the folder as it should look.

Then I check graunt/packet.json free at graunt.com/prepare (or POST it to api.graunt.com/v1/refinery/validate as {"packet_json": <file>}), and upload the folder or a zip of it at graunt.com/studio/refinery.

Agents call the check below directly: POST /v1/refinery/validate with { "packet_json": … } or { "packet_manifest": … } (public, no auth). The contract, with this prompt in ready_packet, is machine-readable at /v1/meta/packet-assembly-contract.

Check your packet

Paste your graunt/packet.json, or a packet manifest, to run the checks the Refinery runs on upload. No account needed, and nothing is stored.