Appearance
Quick start
In this guide you create an ingest key, send one event and one log line with curl, and watch them arrive on the dashboard. It takes about two minutes.
Pick your stack
The fastest path is one command in your project folder. It detects the framework, shows a diff of the few lines it adds, and sends a test event:
sh
npx simpledatalogs initOr follow the page for your stack:
| Web | Mobile and games | Servers |
|---|---|---|
| Next.js · React (Vite) · Vue and Nuxt · SvelteKit · Plain HTML | React Native / Expo · iOS and macOS · Flutter · Android · Unity | Node · Laravel · Python · Go · Rails (HTTP recipe) |
On WordPress or Shopify, install the WordPress plugin or the Shopify app instead.
The rest of this page does the same with curl, so you can see exactly what goes over the wire.
Before you begin
You need an account at simpledatalogs.com and a terminal with curl. The Free plan needs no card.
Early access
While sign-up is closed, accounts are by invitation: choose Ask for early access on the site.
1. Create a project and an environment
- Sign in and choose New project. Name it after your app, for example
Screenshotter. - Open the project and choose New environment, for example
productionordevelopment.
Every environment starts with one deployment called default. You can add more later, one per build or source (see Core concepts).
2. Create an ingest key
- Open the environment and go to the Deployments & keys tab.
- Choose Create key, keep the
defaultdeployment, and pick a kind:- Public (
sdl_pub_…) for apps and websites. It is write-only and safe to ship. - Secret (
sdl_sec_…) for servers.
- Public (
- Choose Create key and copy the key.
Copy it now
Only a hash of the key is stored, so the dialog is the only time you see the full key. A new key starts working within a few seconds.
3. Send your first event
Replace sdl_pub_… with your key and run:
sh
curl -X POST https://edge.simpledatalogs.com/v1/ingest \
-H "Authorization: Bearer sdl_pub_…" \
-H "Content-Type: application/json" \
-d '{"event": "hello_world", "device_id": "my-laptop"}'You should see:
json
{"accepted":"0199f0c4-…"}A 202 with an accepted id means the event is durably stored. If you see {"error":"invalid_key"} instead, wait a few seconds and try again: a brand-new key takes a moment to go live.
4. Send a log line
Log lines don't need a special format. Send plain text, one entry per line:
sh
curl -X POST https://edge.simpledatalogs.com/v1/ingest \
-H "Authorization: Bearer sdl_pub_…" \
-H "Content-Type: text/plain" \
--data-binary $'2026-10-17 09:14:00 ERROR Payment failed for order 7\n2026-10-17 09:14:02 INFO Retried order 7'Each line becomes a row with a time, a level and a message. See Text log lines for every format that is recognized.
5. Watch it arrive
Open the environment's Dashboard. The first event shows up live, with a "first event received" note. hello_world appears in the events table, my-laptop counts as one active device, and the two log lines are on the Logs tab.
Make it retry-safe
The first example is fine for a test. In a real app, give every event an event_id and a ts when it happens, so a retried request never counts twice:
sh
curl -X POST https://edge.simpledatalogs.com/v1/ingest \
-H "Authorization: Bearer sdl_pub_…" \
-H "Content-Type: application/json" \
-d '{
"event": "signup",
"event_id": "'"$(uuidgen)"'",
"ts": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'",
"device_id": "my-laptop",
"props": {"plan": "pro", "is_trial": true}
}'Send the same request twice and the dashboard still counts one signup.
Let an SDK do this
The SDKs for JavaScript, Swift, Laravel, Flutter, Android, Unity, Python and Go set event_id and ts for you, batch, keep an outbox and retry. Or paste the setup prompt from the key dialog into your coding agent.
Next steps
- Core concepts: how keys, environments and deployments fit together.
- Events and log objects: every field you can send.
- Responses: what each status code means and what your client should do.