Call the API when the form is submitted and act on one of three answers: send it to the pipeline, hold it for a person, or drop it. Link spam, words disguised to get past a filter and the same message sent forty times from one script are findings in spam and evasion, and the contact form template holds or refuses them depending on how strong they are. Keyboard mash lands in gibberish, which the template holds and never refuses. The address on the form can go to /v1/email, which reports throwaway providers.
Classifying leads by type: who is writing to you
A lead type is not a harm and not a subject, so it lives on its own axis, leads, beside scores and topics. Every answer measures all eleven types, and none of them decides anything until a policy gives it a line. The contact form template writes four: sales_pitch held from 0.60 and refused from 0.85, and job_seeker, free_work_for_equity and no_budget held from 0.60 and never refused. Scope creep, free consulting and the rest are measured and reported, and acting on them is a rule you add.
How a lead type is scored
One family of phrases is how honest people write, so it scores 0.45. Two families score 0.70 and three or more 0.90, so a line around 0.60 acts on the shape and not on a word. Some types need their defining family: free work for equity needs the equity or the missing pay, because an idea alone is not a request for free work, and free consulting needs the missing budget, because a request for proposal with a budget is a real one. Wording that settles the question silences a type ("salary plus equity" is a job), and pressure ("I have invested years", "you only care about money") adds 0.10 to free work and no budget when they are already there. Longer phrases match loosely, in any order and with any ending, while negations are kept, so "no budget" never turns into its opposite.
Reading the whole thread, not one message
Nobody asks for free work in one sentence. Send the thread to /v1/conversation with an author on each message and the person being judged is read across everything they wrote, while your replies are left out. Missed calls are counted once per message of theirs. Nothing about the thread is stored: what is kept is the verdict on the last message.
Two readers, and the messages rather than the person
The phrase lists settle the familiar shapes in about a millisecond, in eight languages, and a single family scores 0.45, which means very little on its own, so honest enquiries are left alone. When you allow it, the model reads the thread for what the wording leaves to context. A lead type is never a finding about the person, only about what the messages ask for.
Setting the rules for your inbox
Start from the contact form template. Look at a month of leads on your own traffic before you write a rule for another type, then try it as a second policy running beside the one in force: both verdicts are computed, only one acts, and the dashboard shows where they disagree before you switch.