Aloittava yrittäjä ja myynti. Klassinen yhdistelmä joka tuottaa ahdistusta. Pitäisi soittaa kylmäsoittoja, lähettää LinkedIn-viestejä, käydä verkostoitumistilaisuuksissa ja "rakentaa henkilöbrändiä." Kuulostaa työllistävältä, koska sitä se on.

Minulla on parempi idea: rakennetaan kone joka tekee väsyttävän osan puolestani.

Ongelma: myynti joka ei skaalaudu

Perinteinen B2B-myynti pk-yritykselle näyttää tältä: googlaa potentiaalisia asiakkaita, käy läpi nettisivuja, arvaa kuka voisi tarvita palveluitasi, kirjoita viesti, lähetä, toivo vastausta, unohda seurata.

Jokainen vaihe on käsityötä. Jos käytät tähän tunnin päivässä, ehdit kontaktoida ehkä viisi yritystä. Viikossa 25. Kuukaudessa 100. Ja suurin osa ei vastaa, koska viesti ei osunut oikeaan aikaan tai oikeaan kipupisteeseen.

Se on break/fix-myyntiä. Reaktiivista, tehotonta, ja ensimmäinen asia joka jää tekemättä kun oikea asiakastyö alkaa.

Ratkaisu: kone valmistelee, ihminen päättää

Rakensin työkalun joka automatisoi koko B2B-myyntiprosessin — luonnoksiin asti. Prospektoinnista analyysiin, viestiluonnoksiin ja vastausten seurantaan. Minä klikkaan lähetyksen, kone hoitaa kaiken muun.

Tämä eronteko on tärkeä: luonnostelu on automaattista, lähetys on tietoinen valinta. Ei massapostia, ei ajastettuja spam-kampanjoita. Jokainen viesti joka lähtee kmhit.fi-osoitteesta, on ohittanut silmäparini. Kun myyn asiakkaille automaatiota joka jakaa töitä ihmisten ja koneiden välillä, oman myyntiputkeni pitää olla siitä malliesimerkki.

1. Prospektointi: kaupparekisteri kertoo kaiken

Työkalu hakee yrityksiä suoraan YTJ:stä ja PRH:n kaupparekisteristä. Ei googlailua. Rajaan haun toimialakoodilla (TOL), alueella tai yrityksen nimellä, ja saan strukturoidun listauksen tietokantaan.

Haut tallennetaan profiileina — "kuopiolaiset lakitoimistot", "pohjois-savolaiset isännöitsijät" — jotta voin ajaa saman haun uudestaan kun uusia yrityksiä rekisteröidään. Putki virkistyy itsestään.

Samalla työkalu scrapaa jokaisen yrityksen nettisivun ja poimii yhteystiedot. Priorisoi yrityksen oma domain ja yleiset päättäjämuodot (info@, myynti@, sales@), mutta etsii myös nimettyjä kontakteja silloin kun sivulla näkyy "Yhteyshenkilöt"-osio. Nimi, titteli ja osoite menevät talteen, ja ne terävöittävät seuraavan vaiheen analyysiä.

2. Analyysi: tekoäly arvioi automaatiopotentiaalin

Jokainen prospekti analysoidaan automaattisesti. Työkalu kerää kolme datalähdettä: yrityksen nettisivut (sisältö, palvelut, teknologiaviitteet), avoimet työpaikat Työmarkkinatorilta ja EURESista, sekä tilinpäätöstiedot PRH:n XBRL-rajapinnasta.

Data syötetään Claudelle. Mallin valinta on automaattinen, prospektin datarikkauteen perustuen: niukkasisältöiset (yksi sivu, ei nimettyä kontaktia, ei työpaikkailmoituksia) ajetaan Haiku 4.5:llä — nopea, halpa, riittävä bulk-pisteytykseen. Rikassisältöiset Sonnet 4.6:lla, vahvemmalla päättelyllä. Tämä säästää rahaa siellä missä erottelukyky ei ole kriittinen, ja päästää laatua sinne missä se on.

Systeemikehote on prompt-cachetettu. Käytännössä saman cache-ikkunan sisällä tehtyjen analyysien input-kulut putoavat noin kymmenesosaan normaalista. Sadan tai tuhannen yrityksen ajot tulevat merkittävästi halvemmiksi kuin naiivilla toteutuksella.

Tekoäly pisteyttää jokaisen yrityksen kahdella akselilla: automaatiopotentiaali (0–10) ja valmius (0–10). Korkean pistemäärän saaneet saavat tarkemman analyysin ja räätälöidyn myyntipuheen.

Jokaisesta prospektista lähtee myös ladattava PDF-raportti — yrityskohtainen analyysi, ei geneerinen esite — joka menee liitteeksi ensimmäisille tapaamisille. Raportti sisältää yhteenvedon suositellulla lähestymiskulmalla, yrityksen profiilin (toimiala, henkilöstö, liikevaihto, avoimet rekrytoinnit), avainhenkilöt ja ehdotetun kontaktoitavan henkilökohtaisella lähestymiskulmalla, tunnistetut automaatiomahdollisuudet sekä tarkennetut toteutussuunnitelmat aikatauluineen ja ROI-arvioineen. Keskustelu alkaa konkretiasta, ei esittelykalvoista.

3. Yhteydenotot: kone tekee yövuoron

Ensimmäisen kylmäviestin kirjoitus on kallein vaihe koko putkessa: se vaatii yrityskohtaisia viittauksia analyysiin, oikean sävelen (henkilökohtaisen oloinen, ei markkinointipuhetta) ja sopivan pituuden (60–120 sanaa, yksi avoin kysymys). Siksi viestit laaditaan yöllä.

Yöllä kello 01 Helsingin aikaa Anthropicin Batch API ottaa kopin. Batch-hinta on 50 % listahinnasta, ja 50 prospektin generointi ehtii valmiiksi aamuun mennessä. Kustannus per viesti on senttejä.

Aamulla avaan hyväksyntäjonon. Näppäimistöllä käyn luonnokset läpi: 's' lähettää, 'e' avaa editoriin muokkausta varten, 'h' hylkää ja pyytää tekstikenttään lyhyen suomenkielisen palautteen — "liian muodollinen", "viittaus työpaikkaan meni väärin", "kohta X on tahmea." Palaute kulkeutuu seuraavan yön batch-kierrokselle, jolloin viesti regeneroidaan sen pohjalta. Kone oppii yhden epäonnistumisen kerrallaan.

Ei massalähetystä. Kun hyväksyn aamulla 20 viestiä, ne eivät lähde kello 9:30 yhtä aikaa — se näyttäisi vastaanottajan postilaatikossa markkinointiblastaukselta. Lähetykset jaetaan työpäivän ikkunaan (9–16 Helsinki) satunnaisella jitterillä, jotta jokainen viesti saapuu luonnolliselta tuntuvana hetkenä.

4. Lähetys ja vastausten seuranta

Lähetys tapahtuu Microsoft Graphin kautta, omasta postilaatikostani (kalle.huttunen@kmhit.fi). Ei SMTP:tä, ei käyttäjätunnus/salasana-pareja, ei asiakassalaisuuksia — vain kertaalleen bootstrapattu refresh-token ja julkisen Entra-sovelluksen client-id. Viesti lähtee samalla tavalla kuin jos olisin klikannut Outlookissa "Lähetä".

Vastausten tunnistus: taustaluuppi kysyy samasta postilaatikosta "Re:"- ja "Vs:"-lukemattomia viestejä viiden minuutin välein. Kun täsmäävä kampanja löytyy, se merkataan "vastaus saatu" -tilaan, pending-seurantaviestit perutaan ja minä saan ilmoituksen. Ihminen jatkaa keskustelua siitä, mihin kone jätti.

Viestit menevät GDPR/PECR-yhteensopivina: List-Unsubscribe-otsikko on mukana, ja oletuksena ei ole seurantapikseliä eikä klikkien redirectausta. Avausten seurannan voi kytkeä päälle, mutta se tekee viestistä automaattisesti markkinointiviestin näköisen — eikä se ole sopiva vaikutelma personoidulle yhteydenotolle.

5. Dashboard: koko putki yhdellä näkymällä

Pistetaulukko näyttää kuumimmat prospektit. Kanban-näkymä kertoo missä vaiheessa kukin on. Hyväksyntäjono näyttää mitä odottaa klikkausta. Kampanjatilastot: vastausprosentti, konversiot, putken rikastuminen viikoittain. Yksi "Draft All Outreach" -nappi luo luonnokset kaikille kelpoisille prospekteille kerralla, mistä yö-batch ottaa kopin.

Miksi rakensin tämän itse

Markkinoilla on kymmeniä myyntiautomaatiotyökaluja. HubSpot, Pipedrive, Apollo, Lemlist. Jokainen maksaa 50–500 euroa kuussa, ja yksikään ei integroidu suomalaisiin tietolähteisiin: YTJ, PRH, Työmarkkinatori. Yksikään ei ole rakennettu draft-first-ajatuksella — kaikki lähtevät oletuksena massa-ajastuksesta, ja jos haluat operaattorin hyväksyvän, se on lisätoiminto jonka joutuu opettamaan.

Rakensin oman, koska tarvitsin työkalun joka ymmärtää suomalaisen markkinan. Ja koska haluan syödä omaa koiranruokaani: jos myyn automaatiota asiakkaille, oman myyntini pitää olla automatisoitu. Mutta automatisoitu niin, että kontrolli säilyy — ei niin, että ensi viikolla saan asiakkaalta viestin "miksi teiltä tuli tunnin välein kolme samaa viestiä."

Teknologia pinnan alla

Koska tämä on tekninen blogi, avaan lyhyesti arkkitehtuurin.

Backend: Python 3.12, FastAPI asynkronisena läpikotaisin, SQLAlchemy async, PostgreSQL 16, Alembic-migraatiot. Frontend: React 19, TypeScript, Tailwind, Vite.

Tekoäly: Anthropicin Claude API. Mallin valinta perustuu prospektin datarikkauspistemäärään — ei kiinteään sääntöön vaan laskettuun pisteeseen (nimetyt kontaktit, nettisivujen laajuus, työpaikkailmoitukset, liikevaihdon taso). Haiku 4.5 niukoille, Sonnet 4.6 rikkaille. Prompt-caching leikkaa toistuvien ajojen input-kulut murto-osaan. Öiset bulk-luonnokset kulkevat Batch API:n kautta 50 %:n hintaan.

Lähetys: Microsoft Graph, public-client + refresh-token -tyyliin. Ei client-secretia, ei SMTP:tä, ei IMAP:ia. Postilaatikko-polling löytää vastaukset viiden minuutin tarkkuudella.

Scrapaus: BeautifulSoup oletuksena, Playwright-fallback JavaScript-raskaille sivuille jotka eivät rendaa palvelinpuolella. SSE-striimaus tuo analyysin edistymisen reaaliaikaisesti selaimeen.

Kehitysmoodi: toimii ilman API-avainta (MOCK_CLAUDE=true). Mock-vastaukset on kalibroitu realistisiksi, joten UI:ta voi kehittää ilman kustannuksia tai verkkoyhteyttä.

Kaikki suomalaiset datalähteet ovat ilmaisia ja julkisia. Ei maksullisia datapalveluntarjoajia.

Mitä tämä tarkoittaa käytännössä

Perinteinen tapa: 1 tunti päivässä prospektointiin ja viestien kirjoittamiseen. 25 kontaktia viikossa. Suurin osa geneerisiä. Seuranta unohtuu. Ensimmäisen asiakastyön alkaessa myynti pysähtyy kokonaan.

Automatisoitu tapa: Yö-batch luonnostelee 50 viestiä, aamulla 15 minuuttia hyväksyntää näppäimistöllä, päivän aikana lähetykset jaettuna työaikaikkunaan. Vastaukset poimitaan postilaatikosta automaattisesti. Asiakastyön alkaessa putki ei pysähdy.

Tämä on sama periaate jonka rakennan asiakkaille: tunnista toistuvat käsityöt, automatisoi valmistelu, pidä päätösvalta ihmisellä. Ero on siinä, että tällä kertaa asiakas olen minä itse.

Entä sinun myyntiputkesi?

Tämä työkalu ratkaisee minun ongelmani. Mutta sama ajattelutapa toimii missä tahansa yrityksessä jossa myynti, tarjouslaskenta, raportointi tai asiakasviestintä on käsityötä.

Jos tunnistit oman arkesi tästä kuvauksesta, se on hyvä merkki. Se tarkoittaa, että automaatiolla voisi olla konkreettinen vaikutus teidänkin arkeenne.

Haluatko tietää mitä teidän arjessanne voisi automatisoida? Automaatiostartti alkaa kartoituksella: tunnistetaan toistuvat prosessit, priorisoidaan ja toteutetaan nopein voitto ensin.