Neo4j
Turn a Cypher query into a dataset — nodes, relationships, and paths as tabular rows.
The Neo4j connector runs a Cypher query and returns its result as a dataset. It works with Neo4j 5.x and AuraDB over the Bolt protocol.
Connection details
| Field | Required | Notes |
|---|---|---|
| Connection Name | yes | Display name in the catalogue |
| URI | yes | neo4j+s://… for Aura, bolt://… self-hosted |
| User | yes | Use a read-only role |
| Password | yes | Stored encrypted; never shown again |
| Database | no | Defaults to neo4j |
| Scheme | Use for |
|---|---|
neo4j+s:// |
Aura and clusters with a valid certificate |
neo4j+ssc:// |
Clusters with a self-signed certificate |
bolt:// |
Single instance, agent runtime only |
Grant reader, not admin
Neo4j ships a built-in reader role. Use it — a Cypher query from an admin account can modify the
graph, and Chartizer should never be able to.
CREATE USER chartizer SET PASSWORD 'use-a-generated-secret' CHANGE NOT REQUIRED;
GRANT ROLE reader TO chartizer;
Defining a dataset
Unlike a relational source, a Neo4j dataset is not a table. A dataset is a Cypher query, and its returned columns become the fields.
MATCH (d:Dealer)-[:PLACED]->(o:Order)
WHERE o.created_at >= datetime($since)
RETURN d.id AS dealer_id,
d.name AS dealer_name,
d.region AS region,
count(o) AS order_count,
sum(o.total) AS revenue
ORDER BY revenue DESC
Return scalars, not nodes
RETURN d hands back a whole node object, which flattens unpredictably as the graph evolves.
Always project the properties you want with AS aliases — the query above returns five clean,
stable, typed fields.
Parameters
Queries accept the same template variables as other connectors, passed as Cypher parameters:
| Variable | Resolves to |
|---|---|
$since |
ISO-8601 timestamp of the last successful sync |
$now |
UTC time at sync start |
$limit |
Page size, when paginating |
MATCH (o:Order)
WHERE o.updated_at > datetime($since)
RETURN o.id AS order_id, o.total AS total, o.updated_at AS updated_at
Type mapping
| Neo4j | Becomes | Note |
|---|---|---|
String |
text | |
Integer, Float |
integer, decimal | |
Boolean |
boolean | |
Date, DateTime |
date, timestamp | Zoned values converted to UTC |
Duration |
text | ISO-8601 string |
Point |
geo | Usable in map charts |
List |
array | Not exploded into rows |
Node, Relationship |
flattened | Avoid — project properties instead |
Paths and relationships
Graph shapes have to be flattened before they can be charted. Two patterns cover most cases.
MATCH (a:Dealer)-[r:SUPPLIES]->(b:Dealer)
RETURN a.id AS from_id, b.id AS to_id, r.volume AS volume
Ideal for network and map charts, where each row is an edge.
MATCH (d:Dealer)-[:SUPPLIES*1..3]->(x:Dealer)
RETURN d.id AS dealer_id, count(DISTINCT x) AS reachable_dealers
Collapses a variable-length traversal into one row per starting node.
Bound your variable-length patterns
[:SUPPLIES*] with no upper bound can traverse the entire graph and will hit the query timeout —
on a large graph it can affect the database for everyone. Always write *1..3 or similar.
Performance
| Setting | Default | Notes |
|---|---|---|
| Query timeout | 60s | Raise per dataset if genuinely needed |
| Page size | 5,000 rows | Applied with SKIP/LIMIT when paginating |
| Refresh | Scheduled | Live query only for small, fast queries |
Profile before scheduling
Run the query with PROFILE in Neo4j Browser first. A query with hundreds of thousands of db hits
will be slow every 15 minutes forever.
Troubleshooting
Unable to connect to localhost:7687
bolt://localhost is only reachable from a local agent. From the
Cloud runtime, use the public neo4j+s:// endpoint.
Field names look like d.name instead of dealer_name
The query returns unaliased expressions. Add AS aliases to every returned column.
Schema drift after a graph change
A property was added, removed, or retyped on the returned nodes. Since the query defines the schema, projecting explicit properties makes this far rarer.
Query timed out
Unbounded traversal, a missing index on the matched property, or a cartesian product from two
disconnected MATCH clauses. PROFILE the query to find which.