Alternative Data

Smart Insider


QuantConnect hosts company buyback intentions and transaction data provided by Smart Insider. A "buy-back" is when a company repurchases its own stock. It reduces the number of shares available to other investors, which in theory should reduce the supply of shares and increase the stock price.

Smart Insider has two data sets available to use in your algorithm. The Intentions data set is an announcement that establishes the intention to buy-back shares of the company. When the buy-back occurs this triggers a Transaction event with details about the execution of the buyback. Intention events always come before the Transaction event.

You can view more details about these classes in the SmartInsiderIntention and SmartInsiderTransaction objects.


Smart Insider is a linked data source. This means the data is automatically tied to the underlying equity whenever possible. This linkage is performed by the ticker mentioned in the buy-back announcement at the time of the announcement. To add the right data to your strategy, you should use the equity asset symbol which allows LEAN to automatically map to the right asset.

Requesting Data

Select Language:
# Request underlying equity data.
aapl = self.AddEquity("AAPL", Resolution.Minute).Symbol
# Add buyback transaction data for the underlying AAPL asset
self.AddData(SmartInsiderTransaction, aapl)
# Add buyback intention data for the underlying AAPL asset
self.AddData(SmartInsiderIntention, aapl)

Accessing Data

Data can be accessed the normal way via the Slice events. Slice events deliver the unique Transaction and Intention object to your algorithm as they happen.

Alternatively, because this is a linked data source, it is also available on the underlying security via the cache helper methods Securities[symbol].Data.GetAll<SmartInsiderTransaction>(); self.Securities[symbol].Data.GetAll(SmartInsiderTransaction) and Securities[symbol].Data.GetAll<SmartInsiderIntention>(); self.Securities[symbol].Data.GetAll(SmartInsiderIntention).

When you request data via the data cache it will always return the last object stored. You can see an example of both of these accessors in the code below.

Select Language:
using QuantConnect.Data.Custom.SmartInsider;
namespace QuantConnect.Algorithm.CSharp {
    public class SmartInsiderDemonstration : QCAlgorithm {
        public override void Initialize() {
            // Request linked transactions and intentions data for Apple.
            var aapl = AddEquity("AAPL", Resolution.Minute);

        public override void OnData(Slice data)
            // Accessing most recent intentions/transactions via a linked source from securities collection:
            // (returns a list, you can drop the "Values" from the loop below)
            //var intentions = Securities["AAPL"].Data.GetAll<SmartInsiderIntention>();
            //var transactions = Securities["AAPL"].Data.GetAll<SmartInsiderTransaction>();

            // Accessing via Slice event
            var intentions = data.Get<SmartInsiderIntention>();
            var transactions = data.Get<SmartInsiderTransaction>();

            foreach (var intention in intentions.Values) {
                Log($"Intention to buyback for company {intention.CompanyName}");
            foreach (var transaction in transactions.Values) {
                Log($"Buyback transaction took place for company {transaction.CompanyName}");
from QuantConnect.Data.Custom.SmartInsider import *
class SmartInsiderDemonstration(QCAlgorithm):
    def Initialize(self):
        # Request linked transactions and intentions data for Apple.
        aapl = self.AddEquity("AAPL", Resolution.Minute).Symbol
        self.AddData(SmartInsiderIntention, aapl)
        self.AddData(SmartInsiderTransaction, aapl)

    def OnData(self, data):
        # Accessing most recent intentions/transactions via a linked source from securities collection:
        # (returns a list, you can drop the "Values" from the loop below)
        #intentions = self.Securities["AAPL"].Data.GetAll(SmartInsiderIntentions)
        #transactions = self.Securities["AAPL"].Data.GetAll(SmartInsiderTransaction)

        # Accessing unique transaction/intention objects via slice event:
        intentions = data.Get(SmartInsiderIntention)
        transactions = data.Get(SmartInsiderTransaction)

        for intention in intentions.Values:
            self.Log(f"Intention to buyback for company {intention.CompanyName}")

        for transaction in transactions.Values:
            self.Log(f"Buyback transaction took place for company {transaction.CompanyName}")

Historical Data

You can request for historical custom data in your algorithm. To learn more about historical data requests, please visit the Historical Data documentation page. The following example gets Smart Insider stock buyback transactions historical data using the History API.

// Request underlying equity data.
var ibm = AddEquity("IBM", Resolution.Minute).Symbol;
// Add Smart Insider stock buyback transaction data for the underlying IBM asset
var si = AddData<SmartInsiderTransaction>(ibm).Symbol;
// Request 60 days of history with the SmartInsiderTransaction IBM Custom Data Symbol.
var history = History<SmartInsiderTransaction>(si, 60, Resolution.Daily);
# Request underlying equity data.
ibm = self.AddEquity("IBM", Resolution.Minute).Symbol
# Add Smart Insider stock buyback transaction data for the underlying IBM asset
si = self.AddData(SmartInsiderTransaction, ibm).Symbol
# Request 60 days of history with the SmartInsiderTransaction IBM Custom Data Symbol
history = self.History(SmartInsiderTransaction, si, 60, Resolution.Daily)

Data Properties


The following demonstration uses QuantConnect Coarse Universe selection to add Smart Insider custom data to a universe of assets.


Application ContextSubscription Fee
Alpha Streams Use, CompetitionsFree
Personal Paper or Live TradingBuyback Transactions:      $80 USD/mo.
Insider Transactions:                $120 USD/mo

About the Provider

Founded in 1994, Smart Insider has been a provider of insider transactions and intentions data for over 25 years. They specialize in parsing reports and providing insights for insider transactions and intentions for directors and executives in public companies. Covering 60 markets, Smart Insider reports on all listed stocks in countries that require insiders to report their transactions.

You can also see our Tutorials and Videos. You can also get in touch with us via Discord.

Did you find this page helpful?

Contribute to the documentation: