You build the experience. Apointoo keeps the proof.
Next.js, Vue, WordPress, custom landing pages, your own form, or a booking flow, Apointoo runs as the attribution layer behind it. Handler-first, fully typed, tree-shakeable. Works on Node.js, Deno, Cloudflare Workers, and any edge runtime with the Fetch API.
npm install git+https://github.com/vizuh/apointoo-sdk.gitnpmOr add the Apointoo skill to your AI coding agent (Claude Code, Cursor, Codex, Copilot and more):
npx skills add vizuh/apointoo-skills-ceskills.shQuick start
Capture events via API or SDK, preserve GCLID, UTMs, and session data, then send leads, bookings, and outcome updates through your /api/* route in Next.js, Hono, or Express.
import { createBookingHandler } from '@vizuh/apointoo-sdk/server'
import { brevoRestAdapter } from '@vizuh/apointoo-sdk/adapters/notification/brevo-rest'
import { directConfirmAdapter } from '@vizuh/apointoo-sdk/adapters/booking/direct-confirm'
export const app = createBookingHandler({
config: {
projectKey: 'your-clinic',
locale: 'en-US',
timezone: 'America/New_York',
},
booking: directConfirmAdapter(),
notification: brevoRestAdapter({ apiKey: env.BREVO_API_KEY }),
})Adapters
Each integration is a tree-shakeable adapter for the systems where conversions actually happen. Import only what you use.
BLVD
booking
@vizuh/apointoo-sdk/adapters/booking/blvd
OpenDental
booking
@vizuh/apointoo-sdk/adapters/booking/open-dental
direct-confirm
booking
@vizuh/apointoo-sdk/adapters/booking/direct-confirm
Brevo REST
notification
@vizuh/apointoo-sdk/adapters/notification/brevo-rest
Twilio WhatsApp
notification
@vizuh/apointoo-sdk/adapters/notification/twilio-whatsapp
Sheets
persistence
@vizuh/apointoo-sdk/adapters/persistence/sheets
Upstash
dedup
@vizuh/apointoo-sdk/adapters/dedup/upstash
Architecture
One handler is the entry point. It runs the pipeline that holds attribution at every step and sends the confirmed conversion back to Google Ads through the configured adapters.
Booking adapter
BLVD, OpenDental, direct-confirm
Notification adapter
Brevo REST, Twilio WhatsApp
Persistence adapter
Sheets
Dedup adapter
Upstash
Environment variables
Configuration is environment variables. No SDK-specific config files. Drop the keys in, deploy, ship.
NEXT_PUBLIC_GTM_ID
NoGoogle Tag Manager container ID. Leave empty to disable GTM.
HEADLESS_WP_URL
NoWordPress GraphQL endpoint for /docs and /blog content.
BREVO_API_KEY
NoBrevo (Sendinblue) REST API key for the Brevo notification adapter.
BLVD_API_KEY
NoBLVD API key for the BLVD booking adapter.
UPSTASH_REDIS_URL
NoUpstash Redis REST URL for the dedup adapter.
UPSTASH_REDIS_TOKEN
NoUpstash Redis REST token.
GOOGLE_SHEETS_SPREADSHEET_ID
NoGoogle Sheets spreadsheet ID for the persistence adapter.