# Export Contract > Check a SaaS product's bulk data export to its customers, then write the export design and the published data > contract. Describe the export and paste its schema from the last batch and this one; the browser diffs them against > the add-only contract (removed, renamed, retyped and newly non-nullable columns break consumers; new nullable > columns appended at the end do not), ranks the native warehouse share against Parquet file-drops and the delivery > cadence, and checks partition keys, file sizes, a named freshness posture, per-recipient credentials, who pays > storage, compute and egress, residency by region and premium gating. Built on the SkillSafe skill > @samber/bulk-data-sharing-design, from samber/developer-platform-skills (MIT), by Samuel Berthe. https://export-contract.skillsafe.ai/ ## What is free - The camp: a native share when target accounts concentrate on one shareable warehouse, Parquet file-drops as the universal fallback and second surface, the share deleted with no warehouse-resident accounts, streaming only for sub-minute event data. - The cadence: a scheduled full dump by default, promoted to incremental or CDC only by a real freshness need; an existing incremental or CDC run more often rather than promoted; CDC deletes reconciled. - The schema diff: removed, renamed (a removed and an added column of the same type at the same position), retyped, tightened, reordered, inserted mid-schema, added as non-nullable, and appended nullable columns. - The layout and access: partition keys consumers filter on (no ids, at most three levels), 256-512 MB files with compaction, Parquet, a catalog, signed URLs instead of proxied bytes, per-recipient credentials. - Cost and law: storage, compute and egress each paid by someone named; every regulated region pinned, papered or not offered, localization mandates pinned or not offered; a paid gate. - Exports: a schema section (Markdown), the schema diff (.csv), the checks (.csv) and everything (.json). ## The metered lanes Two tasks on gpt-terra, metered per run, routed by `task`. Input string fields: `task` (design or contract), `export`, `schema`, `carry` (contract only: the design's decisions) and `facts`. - `design` replies with `summary`, `camp`, `layout`, `cadence` (`rung`, `posture`, `promotion`), `security`, `cost` (storage, compute, egress with a payer each), `residency`, `pricing`, `rollout` and `caveats`. - `contract` replies with `summary`, `schema` (`column`, `type`, `nullable`, `description`), `changes` (`change`, `column`, `handling`), `freshness`, `quality`, `availability`, `evolution` and `caveats`. The page holds every reply to its own facts: the ranked camp and cadence, a named posture, no high-cardinality partition key, per-recipient credentials, every cost layer paid, residency as required; exactly this batch's columns and types, exactly the page's diff with a deprecation window for every breaking change, and no figure the input never gives. ## Links - API tutorial: https://export-contract.skillsafe.ai/api.html - Source skill: https://skillsafe.ai/skill/@samber/bulk-data-sharing-design