Data collection and SDKs Start with one line. Connect every platform.
Paste one async script on the website. When events happen elsewhere, add an SDK or the server API. Data is already flowing before you name a single event.
- About 2 KB, async
- Collect first, you confirm the names
- Web, app, mini-program
- Server API for backend events
- compressed size
- ≈ 2 KB
- compressed size
- loads without blocking
- async
- loads without blocking
- to the first visitor
- < 1 min
- to the first visitor
Live event stream
Last 60 secondsEvents / min
1,284
▲ 6%
Visitors online
312
▲ 2%
Pending candidates
3
- pageviewWeb · Chromepath=/pricing · ref=googleAuto2 s
- click · button.ctaWeb · Safaritext="Start free"Pending5 s
- order_paidiOS · 4.2.1amount=199 · currency=USDNamed9 s
- shareWeChat mini-programpage=pages/goods/detail · scene=1007Named14 s
- refundServer APIorder_id=A8841 · amount=49Named21 s
- scroll · /pricing · 75%Web · Edgedepth=75Auto30 s
One script, one SDK, the server, or a line of logs
Human browsing comes from the browser or an SDK. The server fills in events the page cannot see. Log import is only for identifying bots.
Web script
One async script in the page. Analytics and Chat both use it.
Platform SDKs
iOS, Android, HarmonyOS, Flutter, React Native, uni-app and mini-programs.
Server API
Payments, refunds or any backend job can send a named event.
Access logs
Submit combined-format log lines to identify bots. Human browsing still goes through the script.
Collect first. Name the events when you want to count them.
From the day the script goes live, clicks, submits and scrolls are recorded. AI groups them and suggests a name. Until you confirm it in the inbox, it is not a report metric.
Autocapture
Clicks, form submits and scrolls are recorded the day the script ships.
AI suggests a name
Similar actions are grouped and given a readable name.
You confirm
One click in the inbox turns a candidate into an event you can chart.
Add business fields
Orders and plans need a short snippet carrying the fields you care about.
Captured today
- click · button.cta186×
- submit · form#signup74×
- click · a[href="/pricing"]210×
- scroll · /pricing · 75%96×
Suggested names
- trial_started96%
Click on the primary button
- signup_submitted94%
Sign-up form submitted
- pricing_viewed81%
Pricing page scrolled to 75%
Event inbox
- trial_startedConfirmed
- signup_submittedConfirmed
- pricing_viewedConfirm
Snippet to paste
// Paste after a successful payment
tapcub.track('order_paid', {
order_id: order.id,
amount: order.total,
currency: 'USD',
});Naming everything up front
Weeks
Write a tracking plan, wait for a release, then discover the names were wrong.
TapCub
Minutes
Collect first. Confirm the names you want and start charting.
SDKs for 7 platforms plus a server API, all into one project
Each source has its own site key; event names and fields are shared across every platform. Identity resolution can recognise them as the same person.
<!-- Place before </head>; shared by Analytics and Chat -->
<script async src="https://app.tapcub.com/w.js" data-site="SITE_KEY"></script>// Initialise once at launch; business events use track
TapCub.start(siteKey: "SITE_KEY")
TapCub.track("order_paid", ["amount": 199, "currency": "USD"])// Initialise once at launch; business events use track
TapCub.start(this, "SITE_KEY")
TapCub.track("order_paid", mapOf("amount" to 199, "currency" to "USD"))// Initialise once in app.js; same code for all three mini-program platforms
const tapcub = require('tapcub-mp')
tapcub.init({ siteKey: 'SITE_KEY' })
tapcub.track('order_paid', { amount: 199 })# Send events from the backend with the project Server Key
curl -X POST https://api.tapcub.com/v1/events \
-H "Authorization: Bearer SERVER_KEY" \
-d '{"event":"order_paid","user_id":"u_8841","props":{"amount":199,"currency":"USD"}}'Validated on arrival, named by you
Every event is checked before it lands: unexpected names, missing properties and wrong types are flagged so they cannot quietly skew a report. Candidates become real events in the inbox, nowhere else.
- Realtime validation of event names, properties and types
- Data-quality warnings pushed to the project home
- Event and property management: merge, rename, retire
Data quality · acme-web
Last 7 daysPassed validation
99.2%
▲ 0.3 pts
Warnings
14
▼ 6
Properties to review
3
| Event | Issue | Count | Status |
|---|---|---|---|
| order_paid | amount received as a string | 38 | Open |
| signup_submitted | Missing property plan | 12 | Open |
| Order_Paid | Case conflict with order_paid | 6 | Merged |
| pricing_viewed | New event, awaiting confirmation | 96 | Inbox |
About 2 KB, async, never in the way of the page
The script is about 2 KB compressed and loads async, so rendering never waits for it. Analytics and Chat share it; the chat widget loads only when needed.
- 1Create a projectFree, no credit card. Each website, app or mini-program gets its own key.
- 2Paste the scriptBefore the closing head tag, or in your site builder's custom code.
- 3Watch the first visitorsRealtime visitors should appear within about a minute of the first page load.
<!-- before </head> · analytics + chat -->
<script async src="https://app.tapcub.com/w.js" data-site="SITE_KEY"></script>
- compressed size
- ≈ 2 KB
- compressed size
- loads without blocking
- async
- loads without blocking
- to the first visitor
- < 1 min
- to the first visitor
Other platforms use their SDK
About 2 KB compressed, loaded async, never blocks page rendering.
Example scenario: A content site pastes the script on Friday afternoon and reads the weekend's sources and top pages on Monday. Two weeks later it confirms the subscribe-button event from the inbox — no developer sprint needed.
About collection
Still have a question?
Chat with the team behind TapCub — we usually reply within a few hours on business days.
How big is the script?
About 2 KB compressed. It loads async and never blocks rendering. The chat widget loads only when a visitor needs it.
Do I need a tracking plan first?
No. Autocapture records clicks, submits and scrolls straight away. AI suggests names; you confirm the ones you want in the inbox.
Which SDKs are there?
Web, iOS, Android, HarmonyOS, mini-programs (WeChat, Alipay, Douyin), Flutter, React Native, uni-app, and a server API.
Will it slow the site down?
The script is small and loads async — it is not a parser-blocking tag.
Can the server send events?
Yes. Payments, refunds and anything that never happens in a browser go through the server API. Log import is only for identifying bots.
What happens when validation fails?
The event still lands, but with a warning and a row in the data-quality panel. You can fix the property, merge duplicate names or retire the event.