react-fathomv0.3.0
On this page
  1. useFathom
  2. Return Value
  3. trackPageview
  4. trackEvent
  5. trackGoal
  6. useTrackOnMount
  7. Options
  8. useTrackOnClick
  9. Options
  10. With Callback
  11. With preventDefault
  12. useTrackOnVisible
  13. Options
  14. With Threshold
  15. With Callback
  16. Implementation Notes

Hooks

API reference for useFathom, useTrackOnMount, useTrackOnClick, and useTrackOnVisible hooks.

useFathom

Main hook for accessing Fathom tracking methods.

tsx
import { useFathom } from 'react-fathom'

function MyComponent() {
  const {
    trackPageview,
    trackEvent,
    trackGoal,
    load,
    setSite,
    blockTrackingForMe,
    enableTrackingForMe,
    isTrackingEnabled,
    client,
    defaultPageviewOptions,
    defaultEventOptions,
  } = useFathom()
}

Return Value

PropertyTypeDescription
trackPageview(options?) => voidTrack a pageview
trackEvent(eventName, options?) => voidTrack a custom event
trackGoal(code, cents) => voidTrack a goal conversion
load(siteId, options?) => voidLoad Fathom with a site ID
setSite(siteId) => voidChange the site ID
blockTrackingForMe() => voidBlock tracking for current user
enableTrackingForMe() => voidEnable tracking for current user
isTrackingEnabled() => booleanCheck if tracking is enabled
clientFathomClientThe underlying client instance
defaultPageviewOptionsPageViewOptionsCurrent default pageview options
defaultEventOptionsEventOptionsCurrent default event options

trackPageview

tsx
const { trackPageview } = useFathom()

// Track current page
trackPageview()

// Track with custom URL
trackPageview({ url: '/custom-page' })

// Track with referrer
trackPageview({ url: '/landing', referrer: 'https://google.com' })

Options:

OptionTypeDescription
urlstringURL to track
referrerstringReferrer URL

trackEvent

tsx
const { trackEvent } = useFathom()

// Basic event
trackEvent('button-click')

// Event with value (in cents)
trackEvent('purchase', { _value: 2999 }) // $29.99

Options:

OptionTypeDescription
_valuenumberValue in cents
_site_idstringOverride site ID

trackGoal

tsx
const { trackGoal } = useFathom()

// Track a goal conversion
trackGoal('SIGNUP', 0) // No value
trackGoal('PURCHASE', 4999) // $49.99

Parameters:

ParameterTypeDescription
codestringGoal code from Fathom dashboard
centsnumberValue in cents

useTrackOnMount

Track a pageview when a component mounts.

tsx
import { useTrackOnMount } from 'react-fathom'

function LandingPage() {
  useTrackOnMount({ url: '/landing' })

  return <div>Welcome!</div>
}

Options

OptionTypeDescription
urlstringURL to track
referrerstringReferrer URL

All options are passed to trackPageview.

useTrackOnClick

Returns a click handler that tracks an event.

tsx
import { useTrackOnClick } from 'react-fathom'

function CTAButton() {
  const handleClick = useTrackOnClick({
    eventName: 'cta-click',
    _value: 100,
  })

  return <button onClick={handleClick}>Get Started</button>
}

Options

OptionTypeRequiredDescription
eventNamestringYesEvent name to track
preventDefaultbooleanNoPrevent default click behavior
callback(e?: MouseEvent) => voidNoCalled after tracking
_valuenumberNoValue in cents

With Callback

tsx
const handleClick = useTrackOnClick({
  eventName: 'signup-click',
  callback: (e) => {
    // Do something after tracking
    router.push('/signup')
  },
})

With preventDefault

tsx
const handleClick = useTrackOnClick({
  eventName: 'link-click',
  preventDefault: true,
  callback: () => {
    // Handle navigation manually
    window.location.href = '/external-link'
  },
})

return (
  <a href="/external-link" onClick={handleClick}>
    External Link
  </a>
)

useTrackOnVisible

Returns a ref that tracks an event when the element becomes visible.

tsx
import { useTrackOnVisible } from 'react-fathom'

function HeroSection() {
  const ref = useTrackOnVisible({
    eventName: 'hero-viewed',
  })

  return (
    <section ref={ref}>
      <h1>Welcome</h1>
    </section>
  )
}

Options

OptionTypeRequiredDescription
eventNamestringYesEvent name to track
thresholdnumberNoVisibility threshold (0-1, default: 0.1)
rootMarginstringNoIntersectionObserver root margin
callback(entry: IntersectionObserverEntry) => voidNoCalled when visible
_valuenumberNoValue in cents

With Threshold

tsx
// Track when 50% visible
const ref = useTrackOnVisible({
  eventName: 'section-viewed',
  threshold: 0.5,
})

With Callback

tsx
const ref = useTrackOnVisible({
  eventName: 'pricing-viewed',
  callback: (entry) => {
    console.log('Pricing section visible!', entry.intersectionRatio)
  },
})

Implementation Notes

  • Uses IntersectionObserver internally
  • Only tracks once per mount
  • Cleans up observer on unmount
  • Falls back gracefully if IntersectionObserver is unavailable

Last updated: October 8, 2026

By

Commune Software