QR Code Types: Static, Dynamic, and Every Data Format Explained

Everything you need to know about what QR codes can encode, how they differ, and which type fits your use case.

Static vs. Dynamic QR Codes

Every QR code conversation starts here. The distinction between static and dynamic codes is the single most important thing to understand before you create one.

Static QR codes

A static QR code encodes data directly into its pattern. The information lives inside the code itself. Once generated, it can't be changed, and nobody can track who scans it or when.

That's not a limitation. It's a feature. Static codes work forever without any server, any subscription, or any internet dependency on the generator's side. Print one on a poster in 2024, and it'll still work in 2034. There's no service to expire, no company to go bankrupt, no redirect URL to break.

Static codes are ideal for:

Dynamic QR codes

A dynamic QR code doesn't encode your target URL directly. Instead, it encodes a short redirect URL (like qr4everyone.com/abc123) that points to your actual destination. Because the redirect is controlled by a service, you can change the destination anytime without reprinting the code.

Dynamic codes also enable scan tracking. Every scan passes through the redirect server, which logs the timestamp, approximate location (from IP), device type, and operating system. For marketing campaigns, events, or product packaging, this data matters.

The tradeoff is dependency. Dynamic codes require a running service. If that service shuts down or you stop paying, the code breaks. You're renting the redirect, not owning it.

Feature Static Dynamic
Data stored in The code itself A redirect server
Editable after printing No Yes
Scan tracking No Yes (time, location, device)
Requires a service No Yes
Cost Free Free or paid (depends on provider)
Longevity Permanent Depends on service uptime

Every QR Code Data Format

QR codes aren't limited to URLs. They can encode any text, and phones interpret certain text patterns as actions. Here's every format that matters, with exact syntax.

URL

The most common format. Encode the full URL including the protocol. Phones open it in the default browser.

https://example.com/page?ref=qr

Plain text

Any arbitrary string. The phone displays it as text. Useful for serial numbers, instructions, or notes.

This is plain text. The phone will display it as-is.

vCard (contact information)

The vCard format lets someone scan a QR code and instantly save a contact to their phone. Supported on every modern smartphone.

BEGIN:VCARD VERSION:3.0 N:Doe;John;;; FN:John Doe ORG:Acme Corp TEL;TYPE=CELL:+1-555-123-4567 EMAIL:john@example.com URL:https://example.com ADR;TYPE=WORK:;;123 Main St;Springfield;IL;62701;US END:VCARD

Use VERSION:3.0 for maximum compatibility. VERSION:4.0 works on most devices but some older Android phones handle it poorly.

WiFi network

Guests scan the code and connect to your WiFi without typing the password. iOS has supported this since iOS 11 (2017), and Android has supported it even longer.

WIFI:T:WPA;S:MyNetworkName;P:MyPassword;;

The parameters:

For a hidden WPA2 network:

WIFI:T:WPA;S:HiddenNetwork;P:SecretPass;H:true;;

Email (mailto)

Opens the user's email client with pre-filled fields. You can specify the recipient, subject, and body.

mailto:hello@example.com?subject=Inquiry&body=Hi%20there

URL-encode spaces and special characters in the subject and body. The recipient, subject, and body are all optional (though a recipient without a subject is most common).

SMS

Opens the messaging app with a pre-filled number and optional message text.

smsto:+15551234567:Hello, I scanned your QR code!

Some devices also accept the sms: scheme:

sms:+15551234567?body=Hello, I scanned your QR code!

The smsto: format has broader support on Android. The sms: scheme with ?body= works best on iOS.

Phone call

Triggers a phone call prompt. Simple and effective for customer service lines or emergency contacts.

tel:+15551234567

Geolocation

Opens the default maps app at specific coordinates. Useful for directing people to a building entrance, event venue, or parking lot.

geo:40.7128,-74.0060

That example points to lower Manhattan. You can optionally add a query parameter for a search label: geo:40.7128,-74.0060?q=City+Hall.

Calendar event (vEvent)

Creates a calendar event on the user's phone. This is the iCalendar format, supported by both iOS and Android.

BEGIN:VEVENT SUMMARY:Team Meeting DTSTART:20260415T140000Z DTEND:20260415T150000Z LOCATION:Conference Room B DESCRIPTION:Quarterly planning session END:VEVENT

Dates use the format YYYYMMDDTHHMMSSZ where Z means UTC. For local time, drop the Z and add a TZID parameter.

Bitcoin and cryptocurrency

Bitcoin uses the BIP 21 URI scheme. Most wallet apps recognize it automatically when scanned.

bitcoin:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa?amount=0.001&label=Donation

Ethereum follows a similar pattern:

ethereum:0x89205A3A3b2A69De6Dbf7f01ED13B2108B2c43e7?value=1e18

The value parameter for Ethereum is in wei (1e18 wei = 1 ETH). Most wallets also support EIP-681 for more complex transactions including token transfers.

App Store links

Direct URLs to app listings. No special scheme needed, just the store URL.

https://apps.apple.com/app/id123456789
https://play.google.com/store/apps/details?id=com.example.app

On iOS, scanning an App Store link opens the App Store directly. On Android, Play Store links open the Play Store. For cross-platform codes, use a redirect URL that detects the OS and sends users to the right store.

MeCard

An older contact format, originally developed by NTT DoCoMo, that's still popular in Japan. It's more compact than vCard, which means smaller (and therefore easier to scan) QR codes.

MECARD:N:Doe,John;TEL:+15551234567;EMAIL:john@example.com;URL:https://example.com;;

MeCard puts the last name first, separated from the first name by a comma. It doesn't support as many fields as vCard, but it works on virtually all smartphones.

Structured Append: Splitting Data Across Multiple QR Codes

The QR code specification includes a feature called Structured Append. It lets you split a single large payload across up to 16 separate QR codes. Each code contains a position header (its index in the sequence plus the total count) and a parity byte calculated over the entire original data. The scanning device reads all codes, reassembles them in order, and processes the combined data.

In practice, almost nobody uses this. Modern QR codes in Version 40 (177x177 modules) can store up to 4,296 alphanumeric characters or 2,953 bytes. That's enough for most purposes. The few real-world uses tend to be industrial inventory systems or manufacturing lines where a single code can't physically be large enough to scan reliably at the required distance.

If you're considering Structured Append, you probably need a different solution entirely, like a URL pointing to a database record.

ECI: Extended Channel Interpretation

By default, QR codes encode text as ISO 8859-1 (Latin-1). That covers Western European languages fine, but falls apart for Chinese, Arabic, Hebrew, Cyrillic, or emoji.

ECI (Extended Channel Interpretation) solves this by adding a header that declares the character encoding. The most important ECI value is 000026, which specifies UTF-8. With UTF-8, you can encode any Unicode character.

Most modern QR code generators default to UTF-8 automatically, so you rarely need to think about ECI. But if you're building a generator or processing QR data programmatically, knowing that ECI 000026 = UTF-8 will save you hours of debugging garbled text.

Other ECI values you might encounter:

Micro QR, Regular QR, and rMQR

Regular QR code

The standard. Versions 1 through 40, with sizes from 21x21 modules up to 177x177 modules. Three finder patterns (the big squares in three corners) make them recognizable. This is what 99% of people mean when they say "QR code."

Micro QR code

Micro QR codes have just one finder pattern instead of three, saving space. They come in four versions (M1 through M4), with the largest being 17x17 modules. Maximum capacity is 35 numeric characters or 21 alphanumeric characters. That's tiny.

They're designed for situations where physical space is extremely limited: tiny electronic components, small medical devices, or printed circuit boards. You won't use these for URLs or contact cards.

rMQR (Rectangular Micro QR)

The newest variant, standardized in ISO/IEC 23941:2022 and developed by Denso Wave (the original inventors of QR codes). rMQR codes are rectangular instead of square. They're designed for narrow label spaces where a square code won't fit: medicine packaging, test tube labels, and industrial parts with long narrow label areas.

rMQR supports 32 versions ranging from 7x43 to 17x139 modules. Maximum capacity is 361 numeric characters or 219 alphanumeric characters. They use one finder pattern and one alignment pattern on opposite corners.

Reader support for rMQR is still limited. Most phone camera apps can't decode them yet. You'll need a specialized scanner or SDK. This will improve over time, but for consumer-facing applications, stick with regular QR codes.

Which Type Should You Choose?

Here's a direct recommendation for common scenarios:

Printed marketing materials (flyers, posters, business cards): Use a dynamic QR code with a short URL. You'll want the ability to fix typos in the destination URL without reprinting, and the scan tracking helps measure campaign effectiveness.

WiFi sharing at your office or restaurant: Use a static QR code with the WiFi format. There's no reason for a redirect. Encode the credentials directly and print it.

Business card with contact info: Static vCard QR code. The data is small, self-contained, and won't change (you'll print new cards when your info changes anyway).

Product packaging: Dynamic QR code. Products have long shelf lives, and you might need to update the landing page, add recalls, or redirect to updated documentation.

Event tickets or check-in: Dynamic QR code with a unique identifier encoded as a URL. The server validates the ticket on scan.

Cryptocurrency payments: Static QR code using the BIP 21 or Ethereum URI scheme. Wallets expect the payment address encoded directly.

Internal inventory or manufacturing: Static QR codes with plain text identifiers. If space is extremely tight, consider Micro QR. If you need a narrow label, look into rMQR (but confirm your scanners support it first).

For most people, the answer is simple: if you want tracking and editability, go dynamic. If you want permanence and zero dependencies, go static. The data format depends on what action you want the scanner to take.

Sources and Further Reading

Ready to create your first QR code?

Sign up in 30 seconds, create a short link, and download your QR code. Free forever.

Create free account