Connect to Gnip streaming API and manage rules

NodeJS Gnip module

Connect to Gnip streaming API and manage rules. You must have a Gnip account with any data source available, like Twitter Power Track.

Currenly, this module only supports JSON activity stream format, so you must enable data normalization in your admin panel.


This class is an EventEmitter and allows you to connect to the stream and start receiving data.

As requested in the Gnip docs (, this option in the constructor allows us to set a read timeout in the client. The recommended value is >=30 seconds, so the constructor will throw an error if a smaller timeout is provided. The default value for this option is 35 seconds.

Connect to the stream and start receiving data. At this point you should have registered at least one event listener for any of these events: 'data', 'object' or 'tweet'.

Terminates the connection.

Emitted when the connection has been successfully established

Emitted for each data chunk (decompressed)

Emitted when any type of error occurs. An error is raised if the response status code is not 20x. {error: String} objects are also checked here.

Emitted for each JSON object.

Emitted for each tweet.

Emitted for each deleted tweet.

Emitted when the connection is terminated. This event is always emitted when an error occurs and the connection is closed.


This class allows you to manage an unlimited number of tracking rules.

Get cached rules.

Creates or replaces the live tracking rules.
Rules are sent in batches of options.batchSize, so you can pass an unlimited number of rules.
The current tracking rules are stored in a local JSON file so you can update the existing rules efficiently without having to remove them all. The callback receives an object as the 2nd argument and contains the number of added and deleted rules.

Clears cached rules.


npm install gnip

Example Usage

var Gnip = require('gnip');

var stream = new Gnip.Stream({
    url : '',
    user : 'xxx',
    password : 'xxx',
    client: xxx // optional
stream.on('ready', function() {
    console.log('Stream ready!');
stream.on('tweet', function(tweet) {
stream.on('error', function(err) {

var rules = new Gnip.Rules({
    url : '',
    user : 'xxx',
    password : 'xxx',
    batchSize: 1234 // not required, defaults to 5000

var newRules = [
    {value: 'keyword as object'},
    {value: '@demianr85', tag: 'rule tag'}

rules.update(newRules, function(err) {
    if (err) throw err;

More details and tests soon...