How to Create an Animated Number Counter in Adobe After Effects with Expressions

Animated numbers appear everywhere in motion graphics.

You see them in:

  • financial videos;
  • dashboards;
  • sports graphics;
  • YouTube statistics;
  • social-media posts;
  • product presentations;
  • infographics;
  • business reports;
  • advertising;
  • explainer videos.

A number might animate from:

0 → 100

or:

€0 → €5,000

or:

0% → 87%

or:

1,000 → 1,000,000

You could manually create text keyframes for every value.

But that would be extremely inefficient.

After Effects expressions provide a much better solution.

Instead of typing dozens or hundreds of numbers, you animate one control value and let an expression automatically convert that value into formatted text.

In this guide, you’ll learn how to create an animated number counter in Adobe After Effects, control it with a Slider, round values, add percentages and currency symbols, format decimals, add thousands separators, create prefixes and suffixes, and build reusable counter systems.

Affiliate disclosure: This article contains affiliate links. If you purchase Adobe After Effects through one of these links, we may earn a commission at no additional cost to you.

What Is an Animated Number Counter?

An animated number counter is a text layer whose displayed value changes automatically over time.

For example:

0

10

25

50

75

100

Instead of manually changing the Source Text every few frames, an expression reads another value and displays it as text.

The most common setup is:

Slider Control

↓

Expression

↓

Source Text

Animate the Slider.

The text updates automatically.

Why Use Expressions for Number Counters?

Expressions provide several important advantages.

You can:

  • change the final value quickly;
  • modify animation timing;
  • format numbers automatically;
  • reuse the counter;
  • add percentages;
  • add currency;
  • show decimals;
  • add commas;
  • create large-number abbreviations.

This makes number counters ideal for reusable motion-graphics projects.

What We’re Going to Build

We’ll start with a simple:

0 → 100

counter.

Then extend it into:

0% → 85%

€0 → €2,499

0.0 → 9.8

1,000 → 1,000,000

and more advanced formatted counters.

Step 1: Create a Composition

Create a new After Effects composition.

For example:

1920 × 1080

Add a background if needed.

Step 2: Create a Text Layer

Select the Type Tool.

Create a Text Layer.

Type:

0

Style it using your preferred:

  • font;
  • weight;
  • size;
  • color.

Rename the layer:

COUNTER

Step 3: Add a Slider Control

Select the COUNTER layer.

Choose:

Effect → Expression Controls → Slider Control

Rename it:

Value

The Slider will drive the number displayed by the Text Layer.

Step 4: Animate the Slider

At the beginning of the Timeline:

Set:

Value = 0

Create a keyframe.

Move forward two seconds.

Set:

Value = 100

You now have a Slider animation from 0 to 100.

But the visible text still says:

0

We need to connect Source Text to the Slider.

If you’d like to practice expression-driven motion graphics yourself, you can explore Adobe’s current After Effects options here:

Explore Adobe After Effects and current plans

Step 5: Open Source Text

Expand the COUNTER layer.

Find:

Text → Source Text

Alt-click the stopwatch on Windows or Option-click it on macOS.

This creates an expression.

Step 6: Link Source Text to the Slider

Use the Expression Pick Whip to reference:

Value → Slider

Now Source Text receives the numerical Slider value.

Preview the composition.

The number changes.

However, you may notice something like:

25.4873

instead of:

25

We need to round the value.

Math.round()

Use:

Math.round()

to round to the nearest whole number.

Conceptually:

Math.round(value)

Now:

25.2 becomes:

25.7 becomes:

This is perfect for most counters.

Math.floor()

Math.floor()

always rounds downward.

For example:

25.9 becomes:

This can be useful when you don’t want the counter to display a number before it has technically reached it.

Math.ceil()

Math.ceil()

rounds upward.

For example:

25.1 becomes:

This is less common for standard number counters but useful to understand.

Which Rounding Method Should You Use?

For most visual counters:

Math.round()

is the best starting point.

Use:

Math.floor()

when the number should not jump ahead.

Use:

Math.ceil()

for specific upward-rounding requirements.

Simple Whole-Number Counter

A basic Source Text expression concept is:

n = effect("Value")("Slider");

Math.round(n);

Now your text displays clean whole numbers.

Change the Final Number

Because the animation comes from the Slider, changing the counter is easy.

Instead of:

0 → 100

make it:

0 → 500

or:

0 → 10,000

The expression does not need to change.

Change the Duration

Move the final Slider keyframe.

For example:

1 second:

fast counter.

5 seconds:

slow counter.

The Source Text automatically follows the timing.

Add Easy Ease

Select the Slider keyframes.

Press:

F9

to apply Easy Ease.

Now the number count accelerates and decelerates smoothly instead of changing at a constant rate.

Use the Graph Editor

For better control, open the Graph Editor.

Adjust the Slider animation curve.

This lets you create:

  • fast starts;
  • slow endings;
  • dramatic acceleration;
  • smooth ease-out counters.

Because Source Text simply follows the Slider, all timing control lives in one place.

Create a Percentage Counter

Suppose you want:

0% → 85%

Start with the same Slider.

Set the final value to:

Then append:

"%"

to the formatted number.

Conceptually:

Math.round(n) + "%"

Now your text shows:

0%

42%

85%

Why Concatenation Matters

In JavaScript expressions, you can combine numbers and text strings.

For example:

50 + "%"

produces:

50%

This is called string concatenation.

It becomes extremely useful for formatting counters.

Prefix and Suffix

A prefix appears before the value.

Examples:

€

$

£

#

A suffix appears after it.

Examples:

%

K

M

** subscribers**

The basic idea is:

prefix + value + suffix

Create a Dollar Counter

Conceptually:

"$" + Math.round(n)

Now the counter displays:

$0

$500

$2500

Create a Euro Counter

Use:

"€" + Math.round(n)

For example:

€0

to:

€2500

Create a Price Counter

Suppose the final price is:

€2,499

We’ll add the thousands separator later.

For now, simply animate:

0 → 2499.

Add a Text Suffix

You might want:

1,250 users

Use:

formattedNumber + " users"

Or:

82% complete

Use:

Math.round(n) + "% complete"

Add Decimals

What if the counter needs:

0.0 → 9.8

Math.round() won’t work because it removes decimal precision.

Use:

toFixed()

toFixed()

For one decimal place:

n.toFixed(1)

Examples:

3 becomes:

3.0

8.764 becomes:

8.8

For two decimals:

n.toFixed(2)

produces values such as:

8.76

Currency with Decimals

A price might need:

€19.99

Conceptually:

"€" + n.toFixed(2)

Now the display always includes two decimal places.

Percentage with One Decimal

Use:

n.toFixed(1) + "%"

Example:

87.4%

This works well for:

  • analytics;
  • business data;
  • technical reports.

Thousands Separators

Large numbers are easier to read with separators.

Compare:

1000000

with:

1,000,000

Formatting numbers improves readability significantly.

Number Formatting with toLocaleString()

JavaScript provides:

toLocaleString()

which can format numbers with grouping separators.

Conceptually:

Math.round(n).toLocaleString()

Depending on the expression environment and locale behavior, this can produce:

1,000

10,000

1,000,000

Always test the output in your After Effects version and project context.

Why Locale Matters

Different regions format numbers differently.

For example:

English-style formatting:

1,000.50

Many European formats may use:

1.000,50

If your project has specific localization requirements, don’t assume one format works everywhere.

Test the intended output.

Manual Comma Formatting

For highly controlled template workflows, you can also build or use custom formatting logic.

This is useful when you need a specific style regardless of system locale.

Counter Example: 0 to 1,000,000

Animate the Slider:

0 → 1000000

Then format the rounded value with grouping separators.

Now the counter becomes suitable for:

  • subscriber milestones;
  • revenue;
  • views;
  • audience statistics.

Add a Prefix Slider? Better: Dropdown or Text Control

If you want users to change between:

  • $
  • €
  • £

you could expose a different type of user control rather than hard-coding the symbol.

For template work, you might use:

  • Dropdown Menu Control;
  • separate Text Layer;
  • other template properties.

Add a Dropdown for Currency

For example:

Currency

  • Dollar
  • Euro
  • Pound

The expression can select the corresponding symbol.

This makes the counter more reusable.

Counter with No Symbol

You may also want:

None

as an option.

Now the same rig supports:

  • prices;
  • plain numbers;
  • statistics.

Create a Counter with Prefix Text

Example:

Over 10,000

Use:

"Over " + formattedNumber

This is useful for marketing graphics.

Counter with Suffix Text

Example:

10,000+

Use:

formattedNumber + "+"

Or:

10,000 customers

Use:

formattedNumber + " customers"

Create a Subscriber Counter

You might animate:

0 → 100000

Display:

100,000 Subscribers

This works well for:

  • channel milestones;
  • social media;
  • promotional videos.

Create a Revenue Counter

Animate:

€0 → €1,250,000

Use:

  • Euro prefix;
  • grouping separators;
  • zero decimals.

This creates a professional business-style metric.

Create a Percentage KPI

Animate:

0% → 97.4%

Use one decimal.

Add a label:

Customer Satisfaction

This is excellent for:

  • dashboards;
  • presentations;
  • corporate video.

Create a Rating Counter

Animate:

0.0 → 4.8

Suffix:

/5

Result:

4.8/5

Create a Temperature Counter

Animate:

0 → 24

Suffix:

°C

Now the same counter system works for technical and weather graphics.

Create an Age or Year Counter

Animate:

0 → 40

Suffix:

** years**

Or create a year sequence such as:

2000 → 2026

This can be useful for timelines.

Create a Countdown

Counters don’t need to go upward.

Animate the Slider:

10 → 0

Now you have a countdown.

Add:

seconds

or no suffix.

Countdown with Math.ceil()

For countdowns, Math.ceil() may sometimes provide more natural behavior because you may want the displayed number to remain:

10

until the value crosses below 9.

The correct rounding method depends on the timing style.

Timer-Style Countdown

For a more advanced countdown, you can convert seconds into:

MM:SS

For example:

01:30

01:29

01:28

This requires additional formatting logic.

Convert Seconds into Minutes and Seconds

Conceptually:

Minutes:

Math.floor(totalSeconds / 60)

Seconds:

totalSeconds % 60

Then format each as two digits.

This enables:

  • timers;
  • sports clocks;
  • countdowns;
  • event graphics.

Leading Zeros

Sometimes you need:

01

instead of:

1

For timers, leading zeros improve visual consistency.

You can add formatting logic that ensures single-digit values receive a preceding zero.

Counter with Two Digits

Examples:

01

02

09

10

This is useful for:

  • timers;
  • countdowns;
  • ranking graphics.

Create an odometer-style Counter

A basic number counter changes the Source Text.

But you can also create more elaborate designs where individual digits roll vertically like an odometer.

This requires a different animation setup but can still use expression-driven numerical logic.

Simple Counter vs Odometer Counter

Simple counter

Fast to build.

Text changes directly.

Odometer

More visually elaborate.

Individual digits roll.

Use the simple counter first unless the design specifically needs mechanical digit movement.

Animate Color Based on Value

A counter can change color as it reaches certain values.

For example:

0–50:

red.

51–80:

yellow.

81–100:

green.

This requires conditional logic or value mapping.

Progress Counter

Combine:

Percentage Counter

with:

Progress Bar

Both can be driven by the same Slider.

This is an excellent example of property linking.

One Slider Drives Counter and Bar

Create:

Progress

Slider:

0–100.

Use it for:

Source Text → 0–100%

and:

Progress Bar Scale X → 0–100%

Now both elements stay synchronized automatically.

Add a Circular Progress Ring

The same Slider can control:

Trim Paths → End

while Source Text displays the percentage.

Now:

Progress = 65

produces:

65%

and:

a ring filled to 65%.

This is a very practical dashboard animation.

Create an Animated Statistic Card

Build:

Large Counter

Label

Icon

Background

For example:

2.4M

Monthly Views

The number can animate while the rest remains stable.

Abbreviate Large Numbers

Instead of:

2,400,000

you may want:

2.4M

Likewise:

15,000

could become:

15K

This requires conditional formatting.

K, M, and B Formatting

Conceptually:

If value ≥ 1,000,000,000:

divide by 1,000,000,000 and add:

B

If value ≥ 1,000,000:

divide by 1,000,000 and add:

M

If value ≥ 1,000:

divide by 1,000 and add:

K

Otherwise:

display the full number.

Example

2400:

2.4K

2500000:

2.5M

1200000000:

1.2B

This is useful for modern analytics graphics.

Keep Precision Consistent

For abbreviated counters, decide whether you want:

2M

or:

2.0M

or:

2.45M

The right choice depends on the design.

Avoid unnecessary precision.

Add Expression Controls

A reusable counter can expose:

Value

Decimal Places

Prefix

Suffix

Animation Duration

Not all of these need to be Expression Controls directly, but the principle is to expose the parameters users actually need.

Create a Master Counter Control Layer

For more complex compositions, create a Null:

CTRL — COUNTER

Add:

Value

Decimal Places

Minimum Value

Maximum Value

Color

Other visible layers can reference those settings.

Animate the Controller, Not the Text

This is a useful organizational principle.

Keep the Text Layer responsible for formatting.

Keep the controller responsible for numerical animation.

That separation makes the project easier to manage.

Drive Multiple Counters

Suppose you’re creating a dashboard with:

  • Revenue;
  • Customers;
  • Conversion Rate.

Each can have its own Slider.

Or they can share a global animation progress control.

Global Progress Technique

Create:

Animation Progress

Slider:

0–100.

Then each counter maps that progress to a different final value.

For example:

Progress 0–100

maps to:

Revenue 0–1,000,000

Customers 0–12,500

Conversion 0–8.4%

Now one animation drives the complete dashboard.

Why This Is Powerful

You can adjust the entire infographic timing using one set of keyframes.

All counters remain synchronized.

Use linear() for Global Progress

linear() is ideal for this.

Conceptually:

linear(progress,0,100,0,targetValue)

Now each metric receives its own target while sharing the same master progress.

Use ease() for Better Motion

Replace linear() with ease() when you want counters to ease naturally.

This can make dashboard sequences feel more polished.

Stagger Multiple Counters

Not every number needs to animate simultaneously.

You can offset:

  • layers;
  • animation controls;
  • time references.

For example:

Revenue begins first.

Customers follow five frames later.

Conversion follows another five frames later.

This creates visual rhythm.

Number Counter Animation Speed

A counter going from:

0 to 100

over one second may look fine.

A counter going from:

0 to 10,000,000

doesn’t need ten million visible steps.

After Effects calculates the changing value continuously.

The viewer simply perceives the number increasing rapidly.

Frame Rate Affects Visible Steps

At 30 fps, a two-second animation contains roughly:

60 displayed frames.

Even if the number moves from:

0 to 1,000,000,

the viewer only sees around 60 intermediate displayed states.

That’s perfectly normal.

Motion Blur Does Not Apply to Text Changes the Same Way

Changing Source Text values is not the same as moving a layer through space.

Traditional Transform motion blur won’t create a smooth numerical smear between digit values.

If you want odometer-like movement, animate actual digit layers or use a different visual technique.

Ease the Slider, Not the Source Text

The Source Text expression simply reads the value.

Control timing through:

Slider keyframes

and:

Graph Editor.

This keeps the expression simple.

Use Hold Keyframes for Step Counters

Sometimes you want discrete steps:

1

2

3

4

rather than a continuously changing number.

You can use:

  • stepped values;
  • Hold Keyframes;
  • Posterize Time;
  • mathematical rounding.

This is useful for stylized digital counters.

Posterize Time

posterizeTime()

can limit how often an expression updates.

For example, a counter could update only:

10 times per second.

This creates a more mechanical stepped effect.

Counter with a Mechanical Feel

Instead of changing every frame, use a lower update rate.

This can work well for:

  • retro displays;
  • scoreboards;
  • terminal-style graphics.

Counter with Glitch Effects

You can combine a number counter with:

  • Wiggle;
  • Glow;
  • RGB separation;
  • noise;
  • flicker.

This creates stylized technology or cyber graphics.

Keep the core numerical expression separate from the visual effects.

Counter with Responsive Background

Remember our auto-resizing text boxes?

A number counter can use the same technique.

The background automatically grows as:

99

becomes:

100,000

This is particularly useful when large values change the text width substantially.

Counter with Responsive Label

Build:

Number

and:

Label

inside a responsive card.

For example:

1.2M

Downloads

The card can adapt automatically.

Counter in a Lower Third

You can combine the techniques from previous articles.

For example:

Quarterly Growth

+28.7%

inside a responsive lower third.

Now:

  • text responds;
  • box resizes;
  • number animates;
  • colors are controlled centrally.

Counter and Audio

You can even connect numerical values to audio data.

For example, display the current amplitude.

This is more technical than most practical designs, but it demonstrates that expressions allow one data source to drive another.

Common Mistake: Showing Too Many Decimals

Don’t display:

87.493827%

unless that level of precision is genuinely meaningful.

Use appropriate rounding.

Common Mistake: No Number Formatting

Large numbers without separators are difficult to read.

Compare:

15000000

with:

15,000,000

Common Mistake: Wrong Currency Format

Formatting expectations vary by region.

Be deliberate about:

  • symbol;
  • decimal separator;
  • grouping separator;
  • symbol position.

Common Mistake: Counter Animates Too Fast

If the number becomes unreadable, slow it down or shorten the displayed precision.

Common Mistake: Counter Animates Too Slowly

Watching a number slowly count from 0 to 1,000,000 for 20 seconds is rarely engaging.

Match duration to context.

Common Mistake: No Easing

Linear counters can feel mechanical.

Use easing when appropriate.

Common Mistake: Formatting Logic Mixed Everywhere

Keep:

numerical control

and:

text formatting

organized separately.

Common Mistake: Using Text Keyframes Manually

If the number is mathematically continuous, a Slider and expression are usually much easier.

Common Mistake: No Stress Testing

Try:

0

9

99

999

10,000

1,000,000

Make sure the layout still works.

Counter Expression Workflow

A clean process is:

1. Create the Text Layer

2. Add Value Slider

3. Animate the Slider

4. Link Source Text

5. Round or format

6. Add prefix/suffix

7. Add thousands separators

8. Test extreme values

9. Add responsive layout

10. Save as reusable component

Five Number Counter Exercises

Exercise 1 — Basic Integer Counter

Animate:

0 → 100

with Math.round().

Exercise 2 — Percentage

Animate:

0 → 85%

Exercise 3 — Price

Animate:

€0 → €2499

with two decimal places if required.

Exercise 4 — Large Statistic

Animate:

0 → 1,000,000

with grouping separators.

Exercise 5 — KPI Card

Combine:

Counter + label + progress bar.

These exercises cover most practical counter workflows.

Practical Project: Percentage Ring

Create:

Progress Slider

Animate:

0 → 85.

Use it to control:

Text: 85%

and:

Trim Paths End: 85%

Now you have a synchronized circular progress indicator.

Practical Project: Revenue Metric

Create:

Revenue

as a large number.

Animate:

0 → 1250000.

Format it:

€1,250,000

Add:

Annual Revenue

as the label.

Use a responsive card background.

Practical Project: Social Milestone

Animate:

0 → 100000.

Format:

100K

Add:

Subscribers

Animate celebratory Shape Layers when the final value is reached.

Practical Project: Dashboard

Create three counters:

Revenue

Customers

Conversion Rate

Use one master progress Slider to animate all three.

Each counter maps that progress into a different value.

This is a very efficient infographic workflow.

Frequently Asked Questions

How do I create a number counter in After Effects?

Create a Slider Control, animate its value, and use an expression on Source Text to display the Slider value.

How do I remove decimals?

Use Math.round(), Math.floor(), or Math.ceil() depending on the desired behavior.

How do I show decimal places?

Use toFixed().

How do I add a percentage sign?

Append "%" to the formatted value.

How do I add a currency symbol?

Add a prefix such as "$" or "€".

Can I add commas to large numbers?

Yes. Formatting functions or custom logic can add thousands separators.

Can I animate from a high number to a low number?

Yes. Simply animate the Slider downward.

Can I create a countdown?

Yes.

Can I create a timer?

Yes, though minutes-and-seconds formatting requires additional expression logic.

Can I abbreviate numbers as K or M?

Yes. Conditional expressions can format thousands, millions, and billions.

Can one Slider control a progress bar and number simultaneously?

Yes.

Can I use easing?

Yes. Apply easing to the Slider keyframes.

Do I need a plug-in?

No. Number counters can be created entirely with native After Effects expressions and Expression Controls.

Practice Number Counters in After Effects

Create a Text Layer.

Add a Slider.

Animate:

0 → 100.

Link the Source Text.

Round the number.

Then add:

%

Once that works, duplicate the project.

Turn it into:

€0 → €10,000

Then:

0 → 1.5M

Then:

10 → 0

for a countdown.

In a short practice session, you’ll understand one of the most useful data-driven animation techniques in After Effects.

If you’d like to experiment with number counters and expression-driven graphics yourself, you can explore Adobe’s current After Effects options here:

Get Adobe After Effects and start creating animated data graphics

What Should You Learn Next?

Animated numbers naturally lead into a broader motion-design topic:

data visualization.

Instead of animating just one value, you can use After Effects to create:

  • bar charts;
  • line charts;
  • percentage rings;
  • KPI cards;
  • dashboards;
  • animated infographics.

Expressions can keep values, labels, and shapes synchronized.

The next article will therefore be:

How to Create Animated Charts and Infographics in Adobe After Effects.

We’ll build practical data visualizations and show how expressions and master controls can make them easier to update.

Final Thoughts

Animated number counters are a perfect example of how a simple expression can eliminate a huge amount of repetitive work.

Instead of manually changing:

1

2

3

4

and so on, you animate one numerical control.

The expression handles the display.

From there, formatting turns a basic counter into a professional data graphic.

You can create:

85%

€1,250,000

4.8/5

2.5M

10 seconds

with the same fundamental system.

The workflow is:

Animate a value.

Reference it in Source Text.

Round it.

Format it.

Add prefixes and suffixes.

Connect it to other graphics.

And when the number changes, the animation remains reusable.

That’s what makes expression-driven counters so useful for modern After Effects projects.

Explore Adobe After Effects and start building animated counters and data graphics

I’m Ben

Welcome to After Effects Cloud, a place where I share my passion for Adobe After Effects, motion graphics, animation, and visual effects. I created this website to make learning After Effects easier, whether you’re opening the application for the first time or looking for new techniques to improve your creative work. Here you’ll find practical tutorials, feature guides, workflow tips, and updates covering the latest developments in After Effects. I’m constantly exploring new tools, including AI-powered features and the growing 3D capabilities inside After Effects, and I enjoy sharing what I discover along the way. I hope the articles inspire you to experiment, learn something new, and create amazing things with Adobe After Effects.

Let’s connect

Discover more from Adobe After Effects

Subscribe now to keep reading and get access to the full archive.

Continue reading