Platform

AI

Wave
Agents
Amplitude MCP
AI Feedback
Agent Analytics
Early Access Program

Insights

Product Analytics
Marketing Analytics
Session Replay
Heatmaps

Action

Guides and Surveys
Feature Experimentation
Web Experimentation
Feature Management
Activation

Data

Data Governance
Integrations
Security & Privacy
Solutions
Solutions that drive business results
Deliver customer value and drive business outcomes
Amplitude Solutions →

Industry

Financial Services
B2B
Media
Healthcare
Ecommerce

Use Case

Acquisition
Retention
Monetization

Team

Product
Data
Engineering
Marketing

Size

Startups
Enterprise
Resources

Learn

Blog
Resource Library
Compare
Glossary
Explore Hub

Connect

Community
Events
Customers
Partners

Support & Services

Customer Help Center
Developer Hub
Product Updates
Academy & Training
Customer Success

Tools

Benchmarks
Prompt Library
Templates
Tracking Guides
Maturity Model
Event Taxonomy Generator
Pricing
LoginContact salesGet started

AI

WaveAgentsAmplitude MCPAI FeedbackAgent AnalyticsEarly Access Program

Insights

Product AnalyticsMarketing AnalyticsSession ReplayHeatmaps

Action

Guides and SurveysFeature ExperimentationWeb ExperimentationFeature ManagementActivation

Data

Data GovernanceIntegrationsSecurity & Privacy
Amplitude Solutions →

Industry

Financial ServicesB2BMediaHealthcareEcommerce

Use Case

AcquisitionRetentionMonetization

Team

ProductDataEngineeringMarketing

Size

StartupsEnterprise

Learn

BlogResource LibraryCompareGlossaryExplore Hub

Connect

CommunityEventsCustomersPartners

Support & Services

Customer Help CenterDeveloper HubProduct UpdatesAcademy & TrainingCustomer Success

Tools

BenchmarksPrompt LibraryTemplatesTracking GuidesMaturity ModelEvent Taxonomy Generator
LoginSign Up

Don’t trust client data

When your analytics code runs on tens of millions of phones, strange things can happen.
Insights

Jul 22, 2014

4 min read

Spenser Skates

Spenser Skates

CEO and Co-founder, Amplitude

Don’t Trust Client Data

Analytics and the inaccuracy of phone-reported timestamps

When your analytics code runs on tens of millions of phones, strange things can happen.

One of the biggest issues is with timestamps. Phones are often offline, so an analytics SDK needs to cache data locally before uploading. Once a phone receives internet connectivity it can then upload event data to the server. This upload can happen anytime from immediately after an event has been logged to days later. As you can imagine, a number of potential problems can arise throughout the event logging and uploading process.

What happens if the phone’s clock is incorrect?

For example, here’s the number of events per day of a mobile app that first included analytics instrumentation on April 25th: There are a non-zero number of events being logged in the days leading up to April 24th. In other words, according to this graph, data has been logged by the phone before instrumentation was put in place. Going back further in time for the same app, here’s a graph logging events from January 1970 up to 1 month before instrumentation: From the examples above, it’s clear that some people’s clocks are significantly off, in some cases by years. It’s not possible that clients were logging data before they instrumented Amplitude! So how do we get around this problem? We could timestamp all events to the time when our servers receive the event (the server upload time), but this would be inaccurate as well — around 5% of data is uploaded at least 24 hours after the event actually happened.

What if we tracked the phone’s timestamp when it uploaded the data?

For each event, let’s compare the difference between the phone event timestamp and the server upload time versus the difference between the phone upload timestamp and the server upload time: Difficult to read! Let’s put both axes on a log scale: There are virtually no data points above the y=x line. This makes sense, since the time the event is logged on the phone shouldn’t be later than the time the event is uploaded to our servers. This suggests a very straightforward solution to our timestamp problem: for each event timestamp, subtract the difference between the phone’s upload time and the server’s upload time, and then adjust the phone’s event timestamp accordingly. This should account for how much the phone’s clock was off when the event was first saved. So there you have it — our simple solution for keeping track of when your events happened. Hope this helps you get more accurate timestamp data from all those phones!


A few caveats (for those interested): Of course, this doesn’t account for latency between when the upload was sent and when it reached our server. However, in practice this latency period ends up being much smaller than the amount that a phone’s clock is off-target. Additionally, this solution assumes the phone’s clock is off by a constant amount. It’s possible for the phone’s clock to change between when an event was logged and when it was uploaded. If this happens, the correction could actually make the timestamp less accurate. Unfortunately, there’s no easy way to tell if a phone’s clock has changed. We’ve found that setting a cutoff window where an event is discarded if its adjusted time is greater than 60 days is a reasonable compromise. We’ve also found that using the current server time for all timestamps from the “future” is a reasonable guess.

About the author
Spenser Skates

Spenser Skates

CEO and Co-founder, Amplitude

More from Spenser

Spenser is the CEO and Co-founder of Amplitude. He experienced the need for a better product analytics solution firsthand while developing Sonalight, a text-to-voice app. Out of that need, Spenser created Amplitude so that everyone can learn from user behavior to build better products.

More from Spenser
Topics
Platform
  • AI Agents
  • Agent Analytics
  • AI Feedback
  • Amplitude MCP
  • Product Analytics
  • Web Analytics
  • Feature Experimentation
  • Feature Management
  • Web Experimentation
  • Session Replay
  • Guides and Surveys
  • Activation
Compare us
  • Adobe
  • Google Analytics
  • Contentsquare
  • Fullstory
  • Heap
  • LaunchDarkly
  • Mixpanel
  • Optimizely
  • Pendo
  • PostHog
Resources
  • Resource Library
  • Blog
  • Agent Prompt Library
  • Product Updates
  • AI Early Access Program
  • Amp Champs
  • Amplitude Academy
  • Events
  • Glossary
  • Free Chart Maker
Partners & Support
  • Status
  • Contact Us
  • Customer Help Center
  • Community
  • Developer Docs
  • Partner Program
  • Partner Directory
  • Become an affiliate
Company
  • About Us
  • Careers
  • Press & News
  • Investor Relations
  • Diversity, Equity & Inclusion
View markdown
Terms of ServicePrivacy NoticeAcceptable Use PolicyLegal
EnglishJapanese (日本語)Korean (한국어)Español (LATAM)Español (Spain)Português (Brasil)Português (Portugal)FrançaisDeutsch
© 2026 Amplitude, Inc. All rights reserved. Amplitude is a registered trademark of Amplitude, Inc.
Blog
InsightsProductCompanyCustomers
Topics

101

AI

APJ

Acquisition

Adobe Analytics

Agents

Amplify

Amplitude AI

Amplitude Academy

Amplitude Activation

Amplitude Agent Analytics

Amplitude Analytics

Amplitude Audiences

Amplitude Community

Amplitude Feature Experimentation

Amplitude Full Platform

Amplitude Guides and Surveys

Amplitude Heatmaps

Amplitude Made Easy

Amplitude Session Replay

Amplitude Web Experimentation

Amplitude on Amplitude

Analytics

B2B SaaS

Behavioral Analytics

Benchmarks

Churn Analysis

Cohort Analysis

Collaboration

Consolidation

Conversion

Customer Experience

Customer Lifetime Value

Customer Support

DEI

Data

Data Governance

Data Management

Data Tables

Digital Experience Maturity

Digital Native

Digital Transformer

EMEA

Ecommerce

Employee Resource Group

Engagement

Engineering

Event Tracking

Experimentation

Feature Adoption

Financial Services

Funnel Analysis

Getting Started

Global Agent

Google Analytics

Growth

Healthcare

How I Amplitude

Implementation

Integration

Kimi

LATAM

LLM

Life at Amplitude

MCP

Machine Learning

Marketing Analytics

Media and Entertainment

Metrics

Modern Data Series

Monetization

Next Gen Builders

North Star Metric

Open-Weight AI Models

Partnerships

Personalization

Pioneer Awards

Privacy

Product 50

Product Analytics

Product Design

Product Management

Product Releases

Product Strategy

Product-Led Growth

Recap

Retention

Revenue

Startup

Tech Stack

The Ampys

Warehouse-native Amplitude

Recommended Reading

article card image
Read 
Insights
The New Trust Economy in Financial Services

Sep 2, 2026

11 min read

article card image
Read 
Product
How to Secure AI Agent Traces Without Losing the Signal

Aug 28, 2026

7 min read

article card image
Read 
Product
Connecting agent performance to product outcomes

Aug 20, 2026

10 min read

article card image
Read 
Customers
The hidden cost of a bad AI answer

Aug 19, 2026

6 min read

Explore Related Content

101
9 Top Feature Flag Solutions for Modern Product Teams in 2026

Jan 27, 2026

Integration
Using behavioral analytics for growth with the Amplitude app on HubSpot

Jun 17, 2024

10 min read

Personalization
Identity resolution: The secret to a 360-degree customer view

Feb 16, 2024

10 min read

Product
Inside warehouse-native Amplitude: A technical deep dive

Jun 27, 2023

15 min read

Guide
5 Proven Strategies to Boost Customer Engagement

Jul 12, 2023

Video
Designing High-Impact Experiments

May 13, 2024

Startup
9 direct-to-consumer marketing tactics to accelerate ecommerce growth

Feb 20, 2024

10 min read

Growth
Leveraging analytics to achieve product-market fit

Jul 20, 2023

10 min read