# How to build a lead-qualification form that scores itself

Short answer: use QuizGen's `outcomes` field. Points per answer, buckets by
total score, done in one request — no separate scoring spreadsheet.

## The shape of it

```json
{
  "schema_version": 1,
  "kind": "form",
  "title": "Are we a fit?",
  "sections": [ { "key": "main", "questions": [
    { "id": "budget", "type": "choice", "prompt": "Monthly budget?",
      "options": [
        { "value": "under_1k", "label": "Under $1k" },
        { "value": "1k_5k", "label": "$1k–5k" },
        { "value": "over_5k", "label": "Over $5k" }
      ] },
    { "id": "timeline", "type": "choice", "prompt": "When do you need this live?",
      "options": [
        { "value": "asap", "label": "ASAP" },
        { "value": "this_quarter", "label": "This quarter" },
        { "value": "someday", "label": "Just exploring" }
      ] }
  ] } ],
  "outcomes": {
    "method": "points",
    "points": {
      "budget":   { "under_1k": 0, "1k_5k": 2, "over_5k": 5 },
      "timeline": { "asap": 3, "this_quarter": 2, "someday": 0 }
    },
    "buckets": [
      { "key": "not_ready", "max": 3, "title": "Thanks for the interest!",
        "body": "We'll follow up if it's a fit." },
      { "key": "qualified", "min": 4, "title": "Let's talk",
        "body": "Grab a time that works for you.",
        "redirect_url": "https://example.com/book" }
    ]
  }
}
```

Each answer's points sum automatically; the matching bucket decides what the
respondent sees — a message, or a redirect straight to a booking page for
your best leads.

## Reading it back

Every response comes back with its `score` and `outcome` (the bucket key)
already attached:

```json
{ "answers": { "budget": "1k_5k", "timeline": "asap" },
  "score": 5, "outcome": "qualified" }
```

Filter or sort by either field when you pull responses — no need to
recompute scoring on your end.

## Send qualified leads somewhere automatically

Set a webhook (`POST /quizzes/:id/webhook`) and every completed response
fires an event with the same `outcome`/`score` fields, so you can forward
only the `qualified` ones to Slack or a CRM. See
[how webhooks work](/blog/quiz-response-webhooks.md).

---

Full `outcomes` reference: [quizgen.dev/llms.txt](/llms.txt#scoring--outcomes).
