Research
Methodology
This page explains how the Creator Deal Terms Index is produced, what data is included, how individual privacy is protected, and where the current limitations lie. We publish this in full so that every finding can be evaluated on its own terms.
1. Data sources
The Creator Deal Terms Index is produced from records held in CollabBook on behalf of creators who use the platform to manage their brand deals. It is not a survey. Creators do not self-report summary statistics; the underlying records are deal objects, obligation objects, and brand-review objects created as part of normal product use.
The data originates from three schema tables:
- deals -- deal type, platform, status, and contract timestamp. Kill-fee and payment-readiness booleans are present in the schema but excluded from publication (see §Known data gaps).
- obligations -- structured payment milestones, usage-expiration dates, exclusivity-expiration dates, paid-at timestamps, and payment-due-trigger labels (free text).
- brand_reviews -- post-deal reviews submitted voluntarily by creators after a deal is marked complete, including revision rounds, scope changes, usage-rights adherence, and payment timing.
Contract text, AI analysis outputs, creator names, brand names, deal values, and contact details are never read, queried, or included in any aggregation.
2. Anonymization and k-anonymity
The index applies k-anonymity: every published cell must represent at least 10 distinct creators (distinctcreator_id values). A bucket with 3 deals from 3 creators, for example, falls below the threshold even though it has the same row count as one with 10 deals from 3 creators.
Cells below the threshold appear as "Insufficient data" in the published output. No interpolation, rounding-up, or extrapolation is ever applied to reach a threshold.
// suppression rule (simplified)
if (distinct_creator_ids < 10) return "insufficient_data"
The following identifiers are never published under any circumstance: creator ID, brand name, brand ID, deal ID, contact name, contact email, individual deal value, contract text, or AI analysis content.
3. Consent model
The index applies a two-tier consent model.
Deal and obligation data (implicit consent): Aggregate queries against deal-type, platform, status, kill-fee flags, obligation types, and timestamps are permitted without per-row opt-in. Published output from these tables contains no PII. Creators may request an opt-out from their account settings (this control is planned as a near-term product refinement).
Brand-review data (explicit consent required): The brand-review table includes a consent_aggregation boolean. Only rows where this field is true are included in any aggregation. Reviews submitted without checking the consent box are never read by the aggregation process, regardless of any other condition.
4. Sentinel-date exclusion
Some obligation records carry a sentinel value of year 9999 in the due_at column. This sentinel represents an obligation that is "triggered by an event" rather than bound to a calendar date -- for example, a payment due "on client approval" where the approval date is not yet known.
All aggregation queries exclude rows where due_at >= 2999-01-01. Duration metrics derived from obligation timestamps are invalid for sentinel rows. Sentinel rows are not counted toward data-point totals or denominator calculations.
5. Net-terms text parser
The payment_due_trigger field on obligation records is free text written by creators when they record a payment milestone (examples: "net 30", "on signing", "50% upfront", "upon delivery").
The aggregation script normalizes this field using a conservative regex parser. Recognized patterns:
- net [N] -- any number of days (e.g. "net 30", "net-45")
- on signing / upon signing
- on delivery / upon delivery
- on approval / upon approval
- [N]% upfront
- [N]% on signing
- [N]% on delivery
Patterns that do not match are excluded from the net-terms distribution metric. The quarterly JSON includes the parser recognition rate (the percentage of all triggers that matched a recognized pattern). The recognition rate is suppressed as "insufficient_data" when fewer than 10 distinct creators have any payment trigger in the window; otherwise it is published as a percentage. The raw unrecognized count is never published (it has no associated k value and cannot be k-gated). If the recognition rate is below 60%, the net-terms metric is disclosed as low-confidence in the index page.
6. Metric definitions
| Metric | Definition | Source |
|---|---|---|
| Payment window (days) | Days from deals.contracted_at to payment obligation due_at | deals + obligations |
| Usage-rights duration (days) | Days from deals.contracted_at to usage_expiration obligation due_at | deals + obligations |
| Exclusivity duration (days) | Days from deals.contracted_at to exclusivity_expiration obligation due_at | deals + obligations |
| Late-payment rate | Percentage of paid obligations where paid_at > due_at | obligations |
| Days late (median) | Median of (paid_at - due_at) for late obligations only | obligations |
| Revision rounds (median) | Median revision_rounds from brand reviews (consent-gated) | brand_reviews |
| Scope-creep rate | Percentage of reviews where scope_changed = true (consent-gated) | brand_reviews |
| Usage-exceeded rate | Percentage of reviews where usage_exceeded = 'yes' (consent-gated) | brand_reviews |
| Paid on time rate | Percentage of reviews where payment_on_time = 'yes' (consent-gated) | brand_reviews |
| Net-terms distribution | Normalized labels from payment_due_trigger free text | obligations |
Percentile distributions (p25/p50/p75) use PostgreSQL's PERCENTILE_CONT aggregate. Percentages are rounded to one decimal place.
7. Suppression policy
The k that gates a value must be the distinct-creator count of the exact subpopulation the value is computed over — not a broader parent population.
- Eligible-population k — for nullable fields:
COUNT(DISTINCT creator_id) FILTER (WHERE field IS NOT NULL). A bucket of 15 creators where only 7 filled in kill-fee eligibility has k = 7 for that cell. - Conditional-subpopulation k — for statistics computed over a filtered subset: the k is the distinct-creator count of that subset only. Example:
median_days_lateis computed only over obligations wherepaid_at > due_at, so its k isCOUNT(DISTINCT creator_id) FILTER (WHERE paid_at > due_at). A bucket with 15 paid-obligation creators but only 5 who paid late suppresses the median even thoughlate_rate_pct(gated on k = 15) is published. - Sample-size counts —
sample_sizes.total_deals_in_windowandtotal_creators_in_windoware both gated on the window distinct-creator count. When that count is < 10, both fields are published as"insufficient_data"— publishing a raw count for a sub-threshold population reveals the exact size of that group.
Two suppression shapes are used:
- Scalar cell suppression — a single computed value is replaced by
"insufficient_data"when its k < 10. The surrounding row object remains; only the specific field is suppressed. - Distribution bucket suppression — distribution arrays drop any individual bucket whose k < 10. When ALL buckets are dropped the distribution key itself becomes
"insufficient_data"— never an empty array[].
Suppressed cells are never interpolated, replaced with industry estimates, or rounded toward a threshold. A suppressed cell means "we do not have enough data to publish this responsibly" — not "the number is roughly X."
8. Pre-publication review
Before any quarterly output file is committed to the repository, a reviewer confirms:
- The script ran against the production database, not a development snapshot.
- No suppressed cell was replaced with an estimate or interpolated value.
- Every published cell has at least 10 distinct creator IDs (verified via the sample_sizes object in the JSON).
- No brand name, creator name, deal ID, or contact field appears anywhere in the JSON or CSV.
- Sentinel dates were excluded (due_at >= 2999-01-01).
- Brand-review rows are filtered to consent_aggregation = true.
- The methodology page accurately describes the current net-terms parsing approach.
- The founder has reviewed the final output before the page goes live.
9. Known data gaps
contracted_at field is sparsely populated
The contracted_at field on deal records is populated when a creator marks a deal as "contracted" inside CollabBook. Payment-window, usage-rights duration, and exclusivity duration metrics all derive from this field as the start date. Deals where this field is not set cannot contribute to these metrics. This gap is expected to resolve as more creators complete the full deal lifecycle inside CollabBook. Currently fewer than 2% of deal records have this field populated.
Brand-review data requires explicit consent
Brand reviews require a creator to submit a post-deal review and check the consent-for-aggregation box. Early quarters will have zero or near-zero qualifying rows. All review-based metrics (revision rounds, scope creep, usage-rights adherence, payment reliability) show as "Insufficient data" until the threshold of 10 distinct creators with consent is reached.
Usage-rights and exclusivity duration via timestamps only
The schema does not include a structured integer field for usage-rights or exclusivity duration. These durations are derived by computing the number of days between the contracted_at date on the deal and the due_at date on the corresponding obligation. This derivation assumes both dates were entered accurately. Records with sentinel dates are excluded. Contractual language is not analyzed.
Contractual revision limit not captured
The revision-rounds metric reflects rounds actually taken (from brand reviews), not the contractual revision limit agreed at signing. The contractual limit is not currently a structured extracted field. The planned fix is to add revision_limit_contractual as a recognized field key in Scout's contract-extraction taxonomy, which requires a prompt change only and no database migration.
Kill-fee prevalence and payment-readiness friction not published — awaiting provenance columns
The kill_fee_eligible, pr_invoice_required, and related payment-readiness columns in the deals table are defined as NOT NULL DEFAULT false. Because every row has a non-null value regardless of whether the creator explicitly set the field, an IS NOT NULL filter cannot distinguish "creator said no kill fee" from "creator never answered". A published 0% rate is indistinguishable from "402 creators never touched the field." These metrics are excluded from publication until explicit answered-state provenance is added to the schema (e.g. a separate kill_fee_answered_at timestamp column). Once provenance exists, the eligible population can be correctly identified as creators who explicitly set the field, and the metric can be published with a meaningful k gate.
10. License and citation
The Creator Deal Terms Index data (JSON and CSV files) is published under the Creative Commons Attribution 4.0 International license (CC BY 4.0). You are free to share and adapt the data for any purpose, including commercial use, as long as you give appropriate credit.
Suggested citation
CollabBook Creator Deal Terms Index, [Quarter]. CollabBook, Inc. https://collabbook.co/research/creator-deal-terms
For questions about the methodology, data, or research program, contact us at research@collabbook.co.