Build a packet
Build a packet Graunt accepts
Learn what to include in a packet, how to state your rights, and how to check it free before you upload.
What you can upload
- 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)
What a listing needs
- your files Required A folder of files is enough. Keep folders by what they show, and each transcript beside its recording, named after it (.srt, .vtt, .txt or .md). Graunt measures the hours from the files.
- rights basis Required One for the listing: where your right to sell it comes from. Not one for each file.
- whether an AI model made any of it Required None, part or all. Never guessed.
- price Required The price you enter. 0 is free, and a paid price clears the paid order minimum. Graunt suggests none.
- permissions Optional What a buyer may do. Each has its standard answer already, so change only what you want different, in Studio or on the listing sheet.
- name and description Optional Graunt drafts either one you leave empty, and you confirm it.
- source Optional Where the material came from, where you know it.
Rights & provenance
- Every sale on Graunt is under one License, the Marketplace License (https://graunt.com/legal/marketplace-license). Your terms are your answers to the listing's permissions, in Studio or on the listing sheet, and the Order License of a one-time purchase records them. You give one rights basis for the listing, and you don't need a license file or a rights statement for each file. You keep ownership and can keep selling the data anywhere else. A buyer introduced through Graunt buys that data through Graunt for the period the Seller Agreement sets.
- A file of your own terms in the folder is delivered like any other file and binds no buyer. To add written terms, choose "Fill it in yourself" in Studio and use "Your own terms (optional)" on the Price step. They can narrow what you've declared, never widen it, and a buyer accepts them at checkout.
- Public-domain source still produces a refined, machine-optimized packet you may price.
- Provide a source URL or citation where you have it; provenance strengthens the packet but is never fabricated for you.
- Absent required packet metadata is proposed and flagged for your confirmation — never silently invented.
- A file that holds people's personal data (an order history, a store's sales export, an accounting export) goes through the personal-details step (POST /v1/scrub/sessions) first: only its scrubbed output becomes a source, and the packet carries graunt/scrub_record.json.
Then list it
- Upload the folder, a zip or the files at graunt.com/studio/refinery, and check what Studio proposes.
- 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.
- 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.
- Uploading files or checking a packet publishes nothing.
- Graunt checks a listing when you publish it, and may review it after it is live.
- Graunt's extraction is free. A model drafts only the listing fields you leave empty, at Graunt's cost.
- Unsupported or scan-only inputs are recorded with an explicit extraction status — they are never silently dropped or claimed as fully extracted.
Strong evidence vs. inadequate evidence
Rights and provenance
- Strong: “Compiled by seller from the U.S. Office of Management and Budget federal AI use-case inventory; source is a U.S. federal government work, not subject to copyright; retrieval date 2026-03-14; source URL given in the description.”
- Inadequate: “Found online; assumed open.”
Known limitations
- Strong: “Covers federal civilian agencies 2024-01 through 2026-03; excludes DOD and intelligence community; missing fields: budget allocation, project cost basis.”
- Inadequate: “No limitations.”
Freshness
- Strong: “Last reviewed 2026-03-14; a new edition follows each quarterly OMB release.”
- Inadequate: “Recent.”
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.