• Referenssit
Licence to fail
  • Buukkaa minut
    • AI
    • Pitchaus
    • Puhekeikat
  • Ajankohtaista
  • Lukupaketit
    • Start-up -vinkit
    • VC-SPESIAALI
    • Satunnainen dokumentaristi
  • Kuka olen?
  • Ota yhteyttä
  • Valikko Valikko
  • Instagram
  • LinkedIn
  • Youtube
Ajankohtaista

Engagement-signaalit yhteen näkymään HubSpotilla ja Claudella

Tausta

Modernissa B2B-myynnissä on outo paradoksi. Signaaleja syntyy joka päivä valtavasti, mutta ne ovat hajallaan kymmenessä eri työkalussa. LinkedIn-mainonnan klikit ovat yhdessä paikassa, LinkedIn-kommentit toisessa, outreach-vastaukset kolmannessa, webinaariosallistujat neljännessä ja CRM:n omat aktiviteetit viidennessä. Myyjä ei näe kokonaiskuvaa.

Markkinoilla on toki valmiita ratkaisuja. Demandbase, 6sense ja vastaavat platformit alkavat tyypillisesti kymmenistä tuhansista euroista vuositasolla. Pienemmälle tai keskisuurelle yritykselle se on liian kova hinta, varsinkin kun samat engagement-signaalit ovat jo olemassa. Ne pitää vain kasata yhteen näkymään.

Tässä postauksessa kerron, miten rakensin asiakkaalle työkalun joka hoitaa tämän murto-osalla valmisratkaisujen hinnasta. Pohjana ovat HubSpot, Zapier, Vercel ja Claude AI. Käyn läpi konkreettiset askeleet, opit ja kompromissit.

Ensin yksi termi selväksi

Buying signals -kentässä erotetaan kaksi asiaa, jotka menevät helposti sekaisin.

Engagement-signaalit ovat sitä, mitä yritys tekee meidän kanssamme: klikkaa mainostamme, kommentoi LinkedIn-postausta, vastaa Dripify-viestiin, osallistuu webinaariin, vierailee sivustolla. Reaktiivista dataa, mutta vahvaa silloin kun sitä tapahtuu.

Intent-signaalit ovat sitä, mitä yritys tekee meistä riippumatta: lukee aiheesta artikkeleita kolmansilla sivustoilla, vertailee kilpailijoita, hakee tietoa Googlesta. Ennakoivaa dataa, joka vaatii erillisiä lähteitä kuten Bombora tai G2.

Työkalu, jonka rakensin, keskittyy engagement-signaaleihin. Intent-signaalit on rajattu tietoisesti pois.

Lähtötilanne

Asiakkaalla oli noin 450 kohdeyritystä HubSpotissa (he olivat itse merkanneet ne natiivilla hs_is_target_account-kentällä) ja kolme aktiivista LinkedIn-kanavaa: Fibbler mainonnan puolella, GoExtrovert kommentointiin ja tykkäyksiin sekä Dripify outreach-viesteihin. Lisäksi tiimi piti webinaareja, varasi tapaamisia ja kirjasi tehtäviä HubSpotiin.

Ongelma oli, ettei myyjä nähnyt mitään kokonaiskuvaa. HubSpot näytti perustiedot, mutta tieto siitä, että joku yrityksen edustaja oli kommentoinut myyjän LinkedIn-postausta eilen, oli toisessa työkalussa. Tieto Dripify-vastauksesta oli kolmannessa. Mainonnan vaikuttavuus neljännessä.

Kohdeyritysten valinta ei ollut tämän työkalun tehtävä. Asiakas oli tehnyt valintansa jo HubSpotissa, ja työkalun tehtävä oli näyttää signaalit niistä yrityksistä, jotka oli valittu.

Tavoitteena oli rakentaa selainpohjainen näkymä, joka:

  • lukee kaiken datan HubSpotista reaaliajassa
  • yhdistää signaalit eri lähteistä yhdeksi tarinaksi per yritys
  • visualisoi sekä deal-pipelinen että LinkedIn-keskustelut
  • generoi Claude AI:lla viikkoraportin tiimin toimenpiteistä
  • tarjoaa REST API:n, jotta toinen järjestelmä voi käyttää samaa dataa.

Arkkitehtuurin ydinperiaate: HubSpot on keskuspaikka

Yksi tärkeimmistä päätöksistä oli, että HubSpot toimii kaiken datan päätallennuspaikkana. Dashboard ei säilytä omaa tietokantaa eikä yritä olla totuuden lähde. Se lukee HubSpotista ja näyttää tiedot kauniisti.

Tämä päätös on osoittautunut kullan arvoiseksi. Tiimi voi muokata dataa HubSpotissa kuten ennenkin, ja dashboard heijastaa muutokset seuraavalla päivityksellä. Synkronointiongelmia ei ole. Jos dashboard hajoaa, HubSpotin puolella ei mene mitään rikki.

Toinen periaate: kaikki integraatiot vievät dataa HubSpotiin, eivät dashboardiin suoraan. Kun Dripify lähettää tiedon uudesta vastauksesta, se ei mene dashboardin tietokantaan vaan HubSpotin Notes-osioon kontaktille. Dashboard lukee notet, kun se haluaa näyttää keskustelut.

Tämä yksisuuntainen tietovirta tekee koko järjestelmästä helposti ymmärrettävän. Jokainen signaalilähde viimeistellään HubSpotin näkökulmasta, ja dashboard on vain visuaalinen kerros sen päällä.

Teknologiavalinnat

Päädyin seuraavaan pinoon:

  • Vercel hostauspaikkana. Static HTML, CSS ja JavaScript pyörivät Vercelin reunalla, ja Node.js-serverless-funktiot hoitavat HubSpot-kutsut. Hobby-taso riittää tähän mainiosti.
  • HubSpotin Private App -token autentikointiin. Sisältyy tilaukseen, joka asiakkaalla oli jo olemassa muista syistä.
  • Zapier integraatioliimana. Asiakkaalla oli Starter-tilaus jo valmiiksi, joten lisäkustannusta tästä työkalusta ei syntynyt.
  • Anthropic Claude Sonnet 4 signaalidatan tulkintaan. Käyttö on muutamia raportteja viikossa, joten kustannus jää hyvin pieneksi.

Kokonaisuus on kustannuksiltaan murto-osa siitä, mitä valmis ABM-platform maksaisi, varsinkin kun olemassa olevat tilaukset huomioidaan.

Signaalilähteet ja niiden integrointi

Käydään läpi, miten jokainen lähde liittyy kokonaisuuteen.

HubSpot: signaalidatan koti

HubSpot toimii sekä signaalien lähteenä (omat aktiviteetit, kontaktit, dealit) että muiden lähteiden tallennuspaikkana. Käytössä olevat custom propertyt:

  • hot_company: onko yritys merkitty kuumaksi
  • signal_score_14d: account-tason pistemäärä 14 päivän jaksolla
  • linkedin_signal_status: Fibblerin asettama perustuen aktiviteettiin
  • active_contacts_counter: aktiivisten kontaktien lukumäärä yrityksessä
  • hs_is_target_account: HubSpotin natiivi target account -kenttä

Private Appille tarvittiin scopet crm.objects.companies.read, crm.objects.contacts.read, crm.objects.deals.read, crm.objects.custom.read, crm.objects.owners.read, sales-email-read ja timeline. Yksi yllätys matkan varrella: Notes-objektin lukemiseen tarvittiin crm.objects.custom.read, mikä ei ollut mitenkään intuitiivista löytää.

Account-tason pisteytys HubSpotin workflowilla

HubSpot ei ole vain passiivinen tallennuspaikka. Rakensin sinne pisteytysjärjestelmän, joka toimii yritystasolla, ei kontaktitasolla. Ero on tärkeä: B2B-ostopäätös tehdään komiteassa, ei yhden henkilön voimin, joten yksittäisen kontaktin aktiivisuus ei riitä signaaliksi.

Workflowt nostavat signal_score_14d-kentän arvoa yrityksen tasolla sen mukaan, miten yrityksen kontaktit käyttäytyvät: sivuvierailut, latausten avaamiset, lomakkeiden täytöt ja vastaavat. Kun saman yrityksen useampi kontakti tekee aktiviteetteja, pisteet kertyvät samaan account-pottiin. Tämä näkyy myös active_contacts_counter-kentässä, joka kertoo, kuinka monta yrityksen kontaktia on ollut aktiivinen viime aikoina.

Kun yritys ylittää pisteytyksen raja-arvon ja sillä on tarpeeksi aktiivisia kontakteja, hot_company-kenttä saa arvon ”Hot”, ja yritys nousee dashboardin Hot companies -listalle.

Tässä näkyy sama periaate kuin arkkitehtuurissa yleisemmin: HubSpot tekee oman osansa työstä, eikä dashboardin tarvitse kopioida logiikkaa. Pisteytyssääntöjä voi muuttaa HubSpotissa milloin tahansa koskematta koodiin, ja dashboard heijastaa muutokset automaattisesti.

Fibbler: signaali suoraan HubSpotiin

Fibbler synkkaa LinkedIn-mainonnan dataa yritystasolle HubSpotissa. Sen päälle teimme HubSpot-workflowt, jotka asettavat linkedin_signal_status-kentän arvon (Hot/Warm/Cold) mainosdatan perusteella.

Tässä kohtaa tuli yksi projektin opettavaisimmista vaiheista. Testasimme aluksi pisteytystä, jossa myös impressiot nostivat yrityksen statusta, ja nopeasti kävi selväksi ettei se toimi. Impressiot eivät kerro ostajan kiinnostuksesta vaan siitä, että LinkedIn päätti näyttää mainoksen jollekin yrityksen ihmiselle. Sitä ohjaavat budjetti, yleisön koko ja LinkedInin oma delivery-logiikka. Ja kun kampanja targetoi valmiiksi valittua kohdeyrityslistaa, käytännössä jokainen listan yritys kerää impressioita ajan myötä ihan vain siksi, että se on listalla. Impressiopohjainen ”lämmin” ei siis erottele mitään.

Klikkaukset sen sijaan ovat se oikea signaali. Klikki on prospektin oma teko, ei mainosjärjestelmän. Niinpä statuslogiikka rakentuu klikkien varaan: klikannut yritys nousee lämpimäksi, ja impressiot toimivat lähinnä taustatietona siitä, että mainonta ylipäätään tavoittaa yrityksen. Impressiodata on silti hyödyllistä negatiivisena signaalina, sillä jos kohdeyritys ei saa lainkaan näyttöjä, targetointi vuotaa.

Tärkeä detalji: Fibbler ei kulje Zapierin kautta vaan suoraan HubSpotiin. Zapieria tarvitaan vain silloin, kun lähdejärjestelmä ei tarjoa natiivia HubSpot-integraatiota.

Dashboard näyttää värilliset Hot/Warm/Cold-badget yritysriveillä sekä yhteenvedon yläosan metriikkakortissa.

GoExtrovert: signaali Zapierin kautta

GoExtrovert kerää LinkedIn-kommentit ja tykkäykset. Sen Zapier-integraatio kirjoittaa HubSpotissa kontaktin Notes-osioon engagement-tiedot tiettyyn formaattiin:

LinkedIn engagement via Extrovert
Campaign: [kampanjan nimi]
Direct comments: 1 (latest: 2026-02-23T14:32:34.602Z)
Indirect comments: 0 (latest: )
Likes: 1
Connection status: connected
Profile: https://www.linkedin.com/in/xxxxxx

Dashboard etsii notet, jotka sisältävät sanan ”Extrovert”, parsii niistä luvut säännöllisillä lausekkeilla ja näyttää ne uimaradalla.

Dripify: signaali Zapierin kautta, ja yksi rajoitus

Dripify osoittautui hieman hankalammaksi. Sen webhook-integraatio sallii vain yhden ehdon per kampanja: voit valita joko ”After a connection request is sent”, ”After a connection request is accepted” tai ”After a lead replies”, mutta et kaikkia samaan kampanjaan.

Yritimme aluksi luoda kolme erillistä zappia per kampanja ja vaihtaa Dripifyssä ehtoa, mutta pudotusvalikko korvaa aina edellisen valinnan, eikä useampi webhook voi olla aktiivisena yhtä aikaa.

Päätös: keskitytään tärkeimpään signaaliin eli vastauksen saamiseen. ”After a lead replies” on se hetki, jossa lead muuttuu kuumemmaksi. Connection accepted on heikompi signaali, ja request sent on käytännössä kohinaa.

WebinarGeek: sama kaava kuin Dripify

Asiakas piti webinaareja WebinarGeekissä. Natiivi HubSpot-integraatio oli olemassa, mutta se olisi maksanut useita satoja euroja kuukaudessa lisämaksuna. Päätettiin tehdä sama Zapier-pohjainen ratkaisu, jolla New Registration- ja Webinar Watched -tapahtumat viedään HubSpotin Notes-osioon kontaktille tunnistettavassa formaatissa.

Tästä saa hyvän yleisperiaatteen: kun valmis integraatio maksaa enemmän kuin Zapier-tilaus, kannattaa miettiä, rakentaako itse.

Claude AI signaalidatan tulkitsijana

Dashboardin automaattiset raportit toimivat Anthropic API:n kautta: Vercel-funktio hakee datan Hubspotista, muotoilee sen tekstiksi ja lähettää Claude Sonnet 4:lle. Vastaus näytetään dashboardissa. Tämä on toistettava, ennalta määritelty ja käyttäjän ei tarvitse osata muotoilla kysymyksiä.

Sen rinnalla asiakkaalla on käytössä Anthropicin virallinen Claude for Hubspot -integraatio. Se yhdistää Claude.ai-käyttöliittymän suoraan Hubspotiin, jolloin tiimin jäsen voi kysyä ad-hoc-kysymyksiä luonnollisella kielellä ilman että ne pitää koodata dashboardin nappeina. ”Mitkä target accountit ovat samaan aikaan tier 1 -yrityksiä ja Fibbler Hot -tilassa?” tuottaa vastauksen suoraan Hubspot-datasta.

Nämä kaksi kerrosta palvelevat eri tarpeita. Dashboard tuottaa jatkuvasti samanmuotoiset raportit joita koko tiimi hyödyntää päivittäin. Claude for Hubspot on työkalu syvemmälle sukellukselle silloin kun on erityinen kysymys.

Tässä käytimme siis Anthropic API:a koska raportit ovat standardisoidut, koska 451 kohdeyritystä on liian iso joukko, jotta myyjä ehtisi katsoa jokaista joka aamu. Claude saa syötteenä HubSpotista haetut yhteenvedot ja generoi raportin suomeksi.

Claude ei tee päätöksiä, vaan nostaa esiin, mitä datassa näkyy. Tämä erottelu on keskeinen. AI auttaa kohdistamaan huomion, ihminen tekee strategiset valinnat. Tämä on myös syy, miksi Claude on tässä parempi kuin yksinkertainen sääntö ”näytä top 10 hot company”: Claude voi yhdistää useita signaaleja luonnollisella kielellä ja selittää, miksi jokin yritys on kiinnostava juuri nyt, ei pelkästään listata pisteytyksen mukaan.

Ohjeistus on tiukka: älä keksi lukuja tai yrityksiä, käytä vain saamaasi dataa. Tämä on tärkeää, koska kielimallit hallusinoivat helposti, varsinkin jos niille annetaan vapaat kädet.

Claude tuottaa kolme erilaista raporttia napin painalluksella:

  1. Viikkoraportti: mitä viime viikolla tapahtui ja mihin pitäisi keskittyä seuraavaksi
  2. Prioriteettianalyysi: top 10 kohdetta tällä hetkellä ja miksi
  3. Kuukausiraportti johdolle: trendit, dealit, isompi kuva

Dashboardin näkymät

Dashboard on jaettu kolmeen välilehteen.

Dashboard-välilehti näyttää signaalien yhteenvedon. Kuusi metriikkakorttia yläosassa kertovat tilanteen yhdellä silmäyksellä. Niiden alla on Hot companies -lista, deal pipeline kaikilla seitsemällä vaiheella sekä viikkoaktiviteetti-kortti, johon tiimi voi syöttää manuaalisesti ne luvut, jotka eivät vielä tule API:n kautta.

Activities-välilehti näyttää tiimin omat aktiviteetit HubSpotista: tehtävät, meetingit, puhelut ja sähköpostit. Pinottu palkkikaavio näyttää aktiviteettien jakautumisen päivittäin, ja aikaväliksi voi valita 7, 30 tai 90 päivää.

Conversations-välilehti on uimaratamalli LinkedIn-keskusteluille:

  • Uudet (0–1 interaktiota)
  • Aktiivinen (2 interaktiota)
  • Lämmin (3+ interaktiota)
  • Outreach-valmis (5+ interaktiota tai AI:n suosittelema)

Jokaisessa kortissa näkyy kontaktin nimi, yrityksen nimi, source-badget (EXT/DRP), interaktiomäärät emojeineen ja Dripifyn viimeisin tapahtuma. Korttia klikkaamalla avautuu modaali, jossa näkyy koko keskustelun aikajana kronologisesti.

REST API ulkoisille kuluttajille

Asiakas halusi, että heidän toinen järjestelmänsä saa samaa signaalidataa rikastaakseen omaa näkymäänsä. Rakensin yksinkertaisen REST API:n samaan Vercel-projektiin.

Endpointit ovat /api/v1/summary, /api/v1/companies, /api/v1/deals, /api/v1/activities ja /api/v1/conversations. Autentikointi on yksinkertainen API-avain headerissa.

Vastaukset ovat normalisoituja JSON-objekteja. Esimerkiksi companies-endpoint palauttaa arrayn, jossa jokaisella objektilla on selkeät kenttänimet, ei HubSpotin internal name -muotoa.

API on tällä hetkellä read-only. Jos tarve kasvaa, kirjoitusoperaatiot voi lisätä myöhemmin omalla suojauksellaan.

Tärkeimmät opit

Aloita siitä mikä on olemassa, älä siitä mitä toivoisit olevan. Aluksi yritin saada GoExtrovertista direction-tiedon (kuka puhui viimeksi, me vai he), mutta Zapierin lähettämä data ei sisällä sitä, vain kumulatiiviset luvut. Lopulta tämä ei haitannut: konkreettiset luvut ovat itse asiassa hyödyllisempiä kuin yksinkertainen ”he vastasi viimeksi” -indikaattori.

Tee yksi asia kerrallaan. Suurin osa virheistä syntyi, kun yritin tehdä useita muutoksia kerralla. Jokaisen muutoksen testaaminen erikseen säästi paljon aikaa.

Lue ulkoisten palveluiden dokumentaatio ennen kuin lupaat ominaisuuksia. Dripifyn rajoitus (yksi webhook per kampanja) tuli yllätyksenä keskellä rakentamista. Sama koski Google Cloud service accounteja, jotka eivät huhtikuusta 2026 alkaen enää pääse Google Search Consoleen ja GA4:ään tunnistetun Googlen bugin vuoksi. Korjausta odotetaan.

Hauras parsing on tietoinen kompromissi MVP-vaiheessa. GoExtrovert- ja Dripify-notejen parsiminen perustuu Zapierin tarkkaan formaattiin. Jos formaatti muuttuu, parsing hajoaa. Pidemmällä aikavälillä strukturoitu data (HubSpotin custom propertyt) olisi vakaampi ratkaisu, ja se on roadmapilla.

Mitä tämä ei ole

Tämä ei ole valmis ABM-platform, eikä se yritäkään olla. Se ei tee buying committee -mappausta, ei automatisoi stage-siirtymiä eikä ratkaise sales- ja marketing-alignmenttia. Se keskittyy engagement-signaaleihin, ei intent-signaaleihin.

Se on engagement-signaalien keräystyökalu, joka tekee näkyväksi, mitä eri kanavissa tapahtuu, ja yhdistää sen account-tason pisteytykseen. Strategiset päätökset tehdään ihmismielessä, ei dashboardissa.

Rajaus on tietoinen. Jos rakentaisin täydellistä järjestelmää, hinta olisi moninkertainen ja toimitusaika kymmenen kertaa pidempi. Asiakas tarvitsi näkyvyyttä signaaleihin kustannustehokkaasti, ei strategiakoneistoa.

Yhteenveto

Tämä projekti opetti, että hyvä engagement-signaalien keräystyökalu ei vaadi raskasta tietokantarakennelmaa eikä isoa kehitystiimiä. HubSpot keskuspaikkana ja account-tason pisteytysmoottorina, Zapier integraatioliimana, Vercel hostauksena ja Claude AI tulkintatasolla. Siinä on yllättävän pitkälle vievä yhdistelmä.

Tärkeintä oli pitää arkkitehtuuri yksinkertaisena: yksi suunta tiedonkululle, yksi keskuspaikka datalle, yksi käyttöliittymä tiimille. Kaikki kompleksisuus on integraatioissa, ei dashboardissa.

Jos haluat rakentaa vastaavan itse: aloita yhdestä custom propertysta HubSpotissa, hae se ulos Vercel-funktiolla ja näytä se HTML-sivulla. Kun se toimii, lisää seuraava signaalilähde. Ja seuraava. Pian sinulla on engagement-signaalien yhdistämispiste, joka ratkaisee oikean ongelman ilman raskasta hintalappua.

Mikäli haluat jutella teidän yrityksen haasteista ja mitä voisimme keksiä juuri teille, ota yhteyttä.

09.07.2026/by tomi

Kerro kaverille

Mikäli pidit jutusta, tee minulle palvelus ja jaa artikkelia eteenpäin alla olevilla jakonapeilla.

Jaa tämä artikkeli
  • Jaa kohteessa Facebook
  • Jaa kohteessa Twitter
  • Share on Twitter
  • Share on WhatsApp
  • Jaa kohteessa LinkedIn
  • Jaa sähköpostilla

Jos tämä artikkeli oli sinusta hyödyllinen/viihdyttävä, liity postituslistalle

Ei turhaa spämmiä – Viihtymistakuu!

https://licenceto.fail/wp-content/uploads/2026/07/logokooste-e1783588152371.png 650 1848 tomi https://licenceto.fail/wp-content/uploads/2018/11/ltf-logo-small-1.png tomi2026-07-09 12:17:472026-07-09 16:47:32Engagement-signaalit yhteen näkymään HubSpotilla ja Claudella

Viimeisimmät

  • Engagement-signaalit yhteen näkymään HubSpotilla ja Claudella
  • Tekoäly asianajotoimistossa: AI-intake joka säästää tunteja
  • Rakensin App Store -sovelluksen yksin, mitä opin?
  • Työnhaku uudella tavalla: Näillä vinkeillä unelmatyö
  • Elämän merkitys, Nietzschen mukaan

Arkisto

  • heinäkuu 2026
  • huhtikuu 2026
  • kesäkuu 2025
  • maaliskuu 2024
  • joulukuu 2022
  • lokakuu 2021
  • kesäkuu 2021
  • maaliskuu 2021
  • tammikuu 2021
  • joulukuu 2020
  • lokakuu 2020
  • syyskuu 2020
  • huhtikuu 2020
  • maaliskuu 2020
  • helmikuu 2020
  • syyskuu 2019
  • toukokuu 2019
  • maaliskuu 2019
  • helmikuu 2019
  • tammikuu 2019
Tomi Kaukinen

Jos viihdyit, hyödyit tai opit – Liity postituslistalle

Saat sähköpostiisi tiedon, kun lisää luettavaa ilmestyy.

Älä huoli, LTF ei spämmää turhia tai myy yhteystietojasi. Käytän uutiskirjettä vain uusista jutuista ilmoittamiseen.

Löydät minut myös Linkedinistä:

Tomi Kaukinen

Tietosuojaseloste

Tekoäly asianajotoimistossa: AI-intake joka säästää tunteja
Sivun alkuun