skills/market-research-reports/SKILL.md
Create decision-focused market reports whose claims, calculations, assumptions, and uncertainties can be audited. Match depth and format to the question and evidence. There is no required length, chapter count, visual count, or output format.
Do not:
Clarify:
Ask a focused question when a missing choice would materially change the denominator or result. Otherwise state a provisional scope and proceed.
Use references/report_structure_guide.md for modular report design.
Route each question to the source closest to the underlying event:
For company data, prefer the official filing system in the relevant jurisdiction. For industry, labor, prices, population, trade, and national accounts, prefer the responsible national statistical agency or central bank. For cross-country work, use harmonized World Bank, IMF, OECD, or Eurostat data only after checking definitions and original-source lineage.
Read references/official_data_sources.md before using public APIs. API rules
and limits are a dated snapshot: verify current official terms before automated
or high-volume retrieval. Never put an API key in a report or bundled script.
Assign stable IDs (S-001, S-002, ...). Record:
Use assets/source_ledger_template.csv and validate it:
python3 scripts/validate_evidence_ledger.py data/source_ledger.csv
If publication date is unavailable, record not-stated; do not guess.
Assign IDs (C-001, ...). Keep the exact claim text, statement type, source
IDs, report location, as-of date, geography, currency/base, measure/unit,
taxonomy, revision status, confidence, calculation ID, and assumption IDs.
Rules:
unknown, not no.Audit mappings:
python3 scripts/audit_claim_citations.py \
data/claims.csv data/source_ledger.csv
See references/evidence_model.md.
Give every component a disjoint coverage_key and one shared
denominator_id. Do not add:
Use product classifications and supply-use logic when industry codes are too broad. Preserve an unknown/residual category instead of forcing totals.
Compute independently:
TAM_top = sum(disjoint in-scope component values)
TAM_bottom =
sum(customer_count
* addressable_fraction
* annual_quantity_per_customer
* price_per_unit)
Then apply scenario-specific serviceability and capture assumptions:
SAM_s = TAM * serviceable_fraction_s
SOM_s = SAM_s * obtainable_share_s
Use at least two genuinely different scenarios; a downside/base/upside set is usually useful. State horizon, constraints, evidence, and assumptions. SOM is not a guaranteed revenue forecast.
Run the deterministic calculator:
python3 scripts/calculate_market_sizing.py \
assets/market_sizing_scenarios_template.json
Report both methods, midpoint-relative gap, scope differences, sensitivity, and unresolved reconciliation. Do not average incompatible methods.
Separate observed, estimated, and forecast periods. Record series ID, frequency, units, seasonal adjustment, transformations, taxonomy breaks, retrieval date, and vintage/revisions.
For each scenario:
Do not call scenario bounds confidence or prediction intervals. Do not assign probabilities without a validated probabilistic model and diagnostics.
Run:
python3 scripts/forecast_sensitivity.py \
assets/forecast_sensitivity_template.json
Show the range by year, endpoint sensitivity, influential assumptions, and
switching values. See references/data_analysis_patterns.md.
For survey evidence, disclose sponsor, target population, frame, probability/non-probability design, recruitment, mode/language, field dates, unweighted sample, subgroup bases, weighting, response/participation, instrument wording, precision, processing, and limitations.
For interviews/focus groups, disclose recruitment, consent, role coverage, dates/mode, guide, coding, divergent evidence, privacy controls, and limits to generalization.
Never:
Follow references/methods_and_ethics.md.
Define product and geographic scope from the customer perspective before selecting competitors or calculating shares. Consider non-price dimensions, channels, imports, digital/multi-sided features, innovation, and dynamic change where relevant.
Use lawful public evidence and a common product edition, geography, and as-of date. Validate a complete matrix:
python3 scripts/validate_competitor_matrix.py \
assets/competitor_feature_matrix_template.csv \
--source-ledger assets/source_ledger_template.csv
For shares, state revenue/units/capacity/users or other metric, denominator, period, residual share, and source coverage. HHI/CRn are descriptive screens, not legal conclusions. A TAM category is not automatically a relevant antitrust market.
Before combining values:
Check comparison groups:
python3 scripts/check_unit_consistency.py \
assets/consistency_check_template.csv
Lead with findings and uncertainty, not frameworks. Use optional frameworks only to organize questions; do not force scores or a fixed number of factors. Keep recommendations separate from evidence and include dependencies, trade-offs, decision thresholds, and disconfirming evidence.
Visuals are optional. If used, build them from validated local data and include
scope, units, source IDs, calculation ID, observed/forecast distinction, and
limitations. See references/visual_generation_guide.md.
Generate a Markdown workspace:
python3 scripts/generate_report_scaffold.py \
assets/report_manifest_template.json ./market-report-workspace
Or use the optional LaTeX assets:
assets/market_report_template.texassets/market_research.styassets/FORMATTING_GUIDE.mdunknown honestly.references/report_structure_guide.md — modular report architecture.references/evidence_model.md — claim-source mapping and provenance.references/data_analysis_patterns.md — sizing, forecast, consistency,
survey, and concentration methods.references/official_data_sources.md — current official source/API routing.references/methods_and_ethics.md — survey, interview, privacy, competitor,
and antitrust safeguards.references/visual_generation_guide.md — optional evidence-led displays.references/sources.md — dated authoritative source ledger.Use the templates in assets/ as synthetic schemas, not real-world evidence.
All scripts in scripts/ are standard-library, bounded, local-only tools. They
reject oversized or malformed input, do not follow symlink inputs, do not
overwrite outputs without explicit permission, and make no network, LLM, image,
dynamic-evaluation, or pickle calls.