Awesome Procedures on Cypher (APOC)


Neo4j 3.0 introduced the concept of user defined procedures. Those are custom implementations of certain functionality, that can’t be (easily) expressed in Cypher itself. Those procedures are implemented in Java and can be easily deployed into your Neo4j instance, and then be called from Cypher directly.

The APOC library consists of many (about 300) procedures to help with many different tasks in areas like data integration, graph algorithms or data conversion.


Apache License 2.0

"APOC" Name history

Apoc was the technician and driver on board of the Nebuchadnezzar in the Matrix movie. He was killed by Cypher.

APOC was also the first bundled A Package Of Components for Neo4j in 2009.

APOC also stands for "Awesome Procedures On Cypher"


Download latest release

Go to{apoc-release} to find the latest release and download the binary jar to place into your $NEO4J_HOME/plugins folder.

For Neo4j Desktop the plugins directory is in a different place, put the jar-file into these (make sure to replace all at upgrade). See the Neo4j Manual for more detail about the install locations.
  • OSX: /Applications/Neo4j\ Community\ Edition\ <version>.app/Contents/Resources/app/plugins AND /Users/<user>/Documents/Neo4j/default.graphdb/plugins

  • Windows: C:\Program Files\Neo4j CE <version>\plugins

Version Compatibility Matrix

Since APOC relies in some places on Neo4j’s internal APIs you need to use the right APOC version for your Neo4j installaton.

Any version to be released after 1.1.0 will use a different, consistent versioning scheme: <neo4j-version>.<apoc> version. The trailing <apoc> part of the version number will be incremented with every apoc release.

apoc version

neo4j version

3.2.0-alpha07 (3.2.x)

3.1.3 (3.1.x)



3.0.5-3.0.9 (3.0.x)



3.0.0 - 3.0.3


3.0.0 - 3.0.3

using APOC with Neo4j Docker image

The Neo4j Docker image allows to supply a volume for the /plugins folder. Download the APOC release fitting your Neo4j version to local folder plugins and provide it as a data volume:

mkdir plugins
pushd plugins
docker run --rm -e NEO4J_AUTH=none -p 7474:7474 -v $PWD/plugins:/plugins -p 7687:7687 neo4j:{neo4j-version}

Calling Procedures & Functions within Cypher

User defined Functions can be used in any expression or predicate, just like built-in functions.

Procedures can be called stand-alone with CALL;

But you can also integrate them into your Cypher statements which makes them so much more powerful.

Load JSON example
WITH '' AS url

CALL apoc.load.json(url) YIELD value as person

MERGE (p:Person {})
   ON CREATE SET p.age = person.age, p.children = size(person.children)


Built-in Help Command

apoc help apoc


lists name, description-text and if the procedure performs writes, search string is checked against beginning (package) or end (name) of procedure

CALL"apoc") YIELD name, text
WITH * WHERE text IS null
RETURN name AS undocumented

Built-in Package and Procedure Count

To find the procedure count with the package in Neo4j:

Cypher for getting count of procedure in a package
CALL dbms.procedures() YIELD name
RETURN head(split(name,".")) as package, count(*), collect(name) as procedures;