Embedding feature chart/graph in pop-up window in CartoDB?

Embedding feature chart/graph in pop-up window in CartoDB?

I would like to be able to embed a chart/graph of attributes for each feature within a webmap. I've had a look around and haven't found anything definitive on the turorial pages of how to achieve this.

Editing: For the response of this answer related with CartoDB.js, please see here: Including chart based on fields in CartoDB infowindow?

To get a workaround for the answer just by using the CartoDB Editor (and not CartoDB.js explicitly):

CartoDB hasn't still the ability to draw graphs: this means that you need to create them with other tools and then, as you say, show them in the infowindows.

Two approaches here:

  • Create static graphs with any tool and save them as images. Then, you can upload those images to the Internet (or to your Dropbox public folder) and copy their direct links in a column of your CartoDB table. This will allow you to add this image in the infowindow directly with the wizards. You can use the image header template for the infowindows or you can create a custom one and insert your URL column in the src part of a img tag:

    < img src="{{url_column_name}}">

  • You can use any graph tool that let you embed your graphs as iframes. You can load iframes inside of the infowindows. In order to do this, you'd need to add the iframe code in a custom HTML template of template of the infowindow and, as in the previous case, add into a column of your table the URL or identifier for each of your elements.

This would allow you to use some HTML code as:

Recommended readings:

Solution 1: Stick to R

Thanks to @MLavoie. The following example use pure R to create two plot, the "mainplot" and the "hover" which reacts to the hover event of the first one.

This example use the shiny binds for plotly . For every hover event, a POST request is sent to the server, then the server will update the popup-chart. It's very inefficient thus may not work well on slow connections.

The above code is just for demo, and not yet tested. See a working and much more complicated example here (with source).

Embedding feature chart/graph in pop-up window in CartoDB? - Geographic Information Systems

Geographic Question Answering based on Knowledge Graph Embedding Techniques

Code for recreating the results in our Transactions in GIS paper as well as our K-CAP 2019 paper .

Please visit my Homepage for more information.

Geographic Question Answering

The location-aware entity encoder architecture:

  • Python 2.7+
  • Torch 1.0.1+
  • numpy 1.16.0+
  • matplotlib 2.2.4+
  • sklearn 0.20.3+
  • geopandas 0.6.1+
  • shapely 1.6.4+
  • pyproj 2.2.2+

To set up the code , run python . Note that the first three are required for model training and testing. The rest are used for visualization which is optional.

You can download the GeoQA dataset from here. Unextract it and put them in graphqa/dbgeo/ .

This code is implemented in Python 2.7. All codes are in graphqa/netquery/ .

Geographic Question Answering

For each baseline in Table 3:

  1. GQE_ : run graphqa/
  2. GQE : run graphqa/
  3. CGA : run graphqa/
  4. SE-KGE_ : run graphqa/
  5. SE-KGE_ : run graphqa/
  6. SE-KGE_ : run graphqa/
  7. SE-KGE_ : run graphqa/ .

For each baseline in Table 5:

  1. SE-KGE_ : run graphqa/
  2. SE-KGE_ : run graphqa/ .

If you find our work useful in your research please consider citing our paper.

The location encoder component in SE-KGE model is based on Space2Vec. Read our ICLR 2020 paper for a comprehensive understanding:

Note that a part of our code is based on the code of Hamilton et al's NIPS 2018 paper:

Report abuse

Great! Thanks for your feedback.

How satisfied are you with this reply?

Thanks for your feedback, it helps us improve the site.

How satisfied are you with this reply?

It depends on where you copy from and which web browser you use when you paste HTML code into the editor here whether you get the tags or whether you see rendered HTML.

Regarding pasting charts, see this page:

Report abuse

Great! Thanks for your feedback.

How satisfied are you with this reply?

Thanks for your feedback, it helps us improve the site.

How satisfied are you with this reply?

Thank you. Fact is I wrote the text directly in the editor, not copied from anywhere. As I am doing now.

I had already seen the method you are pointing me to. I think it is interesting but useless. The point is creating the charts in Excel, then copying them to powerpoint.

Getting through the routine described in the link to create each chart is incredibly tedious and counter-productive, and definitely not the way it was intended by MS developers.

Furthermore, the method presented there is OK exclusively if you have graphs that are made from adjacent data ranges: you can only paste with link ONCE, subsequent pastes will erase previously pasted data. So you first need to design each single table for each graph in excel? Are we kidding? Basically the method only works if you have simple/basic tables that you could just handle with Apple's Numbers rather than Excel.

And I insist: why the heck are we missing functions to manage links and all linked objects, decide whether or not we want to break links, update them, edit all links at once if the file has changed name or moved to a new location etc?

Why is this so badly designed? I hope someone improves this in the future, because it is a shame.

Report abuse

Great! Thanks for your feedback.

How satisfied are you with this reply?

Thanks for your feedback, it helps us improve the site.

How satisfied are you with this reply?

Just a note on your assumption that you can only paste 2 charts into placeholders. This is only true if you stick to the stock slide layouts that Microsoft designed. If you open the slide master view, you can create additional slide layouts and each one of them can have as many content placeholders as you want. Just click on the Insert Placeholder icon to add either a general-purpose Content placeholder or a Chart placeholder.

Since link editing is very important to you, I recommend you consider using the Windows version of Office, as it has better (though still imperfect) tools for this. Using BootCamp or Parallels, you can move presentations between Windows and Mac versions, if needed. In addition, the Windows versions include Paste Special>Paste link, which provides a genuine link. Otherwise, I think you should give Jim's OS X linking tutorial a try, it's not really that complicated or time consuming in real life.

You'll get more consistent chart formatting between Excel and PowerPoint if you create a common theme file (you can create one in PowerPoint 2011) and apply that to both the Excel source and the PowerPoint destination.

Report abuse

Great! Thanks for your feedback.

How satisfied are you with this reply?

Thanks for your feedback, it helps us improve the site.

How satisfied are you with this reply?

Thank you for your suggestions John.

I have been a windows user for ages (I switched to OSX in 2012, I've been using PCs since the early 1990s). In my experience, despite the fact that we have less features with the OSX versions of MS Office apps than what is available in the Windows versions, the gains in stability and robustness are invaluable. At least with OSX when you have linked files between MS Office applications if one app (e.g. PPT) freezes you don't lose in cascade all others (Excel, Word, Outlook etc.). Time machine is also a life saver for crashing MS apps, where the deadly MS recovery files are just horribly implemented and are a total disgrace for any serious programmer/developer. The first lesson I would give my trainees and junior employees would always be: "Ctrl-S, every 5 minutes guys!" because you can't trust these systems to do a good job.

About using linked files in Windows: this was the same ****, actually it was even worse (due to the inherent weakness of Windows in the past - I hear that WIn10 is more stable). The interface for editing links in powerpoint is a small little pop-up window where you have to edit each link individually disregarding the fact that all links may point to the same file. There is no way to search/replace link information, and overall the link management tools are nothing but appalling. I appreciate that some people try to believe that these things are designed well, fact is they don't.

GFD: A Weighted Heterogeneous Graph Embedding Based Approach for Fraud Detection in Mobile Advertising

Online mobile advertising plays a vital role in the mobile app ecosystem. The mobile advertising frauds caused by fraudulent clicks or other actions on advertisements are considered one of the most critical issues in mobile advertising systems. To combat the evolving mobile advertising frauds, machine learning methods have been successfully applied to identify advertising frauds in tabular data, distinguishing suspicious advertising fraud operation from normal one. However, such approaches may suffer from labor-intensive feature engineering and robustness of the detection algorithms, since the online advertising big data and complex fraudulent advertising actions generated by malicious codes, botnets, and click-firms are constantly changing. In this paper, we propose a novel weighted heterogeneous graph embedding and deep learning-based fraud detection approach, namely, GFD, to identify fraudulent apps for mobile advertising. In the proposed GFD approach, (i) we construct a weighted heterogeneous graph to represent behavior patterns between users, mobile apps, and mobile ads and design a weighted metapath to vector algorithm to learn node representations (graph-based features) from the graph (ii) we use a time window based statistical analysis method to extract intrinsic features (attribute-based features) from the tabular sample data (iii) we propose a hybrid neural network to fuse graph-based features and attribute-based features for classifying the fraudulent apps from normal apps. The GFD approach was applied on a large real-world mobile advertising dataset, and experiment results demonstrate that the approach significantly outperforms well-known learning methods.

1. Introduction

Online mobile advertising plays a vital role in the mobile app ecosystem. One of the popular models in mobile app advertising is known as cost per action (CAP), where payment is based on user action, such as downloading and installing an app on the user’s mobile device. This CAP model may incentivize malicious mobile content publishers (typically app owners) to generate fraudulent actions on advertisements to get more financial returns [1–3]. Some traditional methods and techniques have been used for detecting and stopping click fraud, such as threshold-based method [4], CAPTCHA [5], splay tree [6], TrustZone [7], power spectral density analysis [8], and social network analysis [9].

To automatically detect mobile advertising fraud behaviors, machine learning methods have been successfully applied to find fraud patterns in data, distinguishing suspicious advertising fraud operation from normal one [10–14]. As for learning model with attribute features, researchers usually use several attributes from each sample to train a learning model to identify the fraud behaviors. Unfortunately, such approaches may suffer from labor-intensive feature engineering and robustness of the detection algorithms, since the online advertising big data and complex fraudulent advertising actions generated by malicious codes, botnets, and click-firms are constantly changing. What is more, fraudsters could easily adjust their fraud patterns based on existing fraud detection attributes and rules to avoid being detected. Recently, some researchers try to use the relationship between information entities to construct a graph model and then use the graph mining or learning methods to identify the changing fraud behaviors [15–17]. All these methods obtain useful insights into the learning mechanism to classify fraud behaviors from normal activities. Intuitively, if we could combine the complementary information from attributes of sample data and relationship between entities (e.g., users, apps, and ads), we will be able to improve the accuracy and robustness of fraud detection.

However, to unleash the power of attribute-based information and graph-based information, we have to address a series of challenges. First, to take advantage of the characteristic of graph, we should construct a suitable graph, which could potentially represent the interaction behaviors between information entities such as users, apps, and ads. Second, an efficient graph learning method should be developed to learn the useful structural and semantic representation information from constructed graph [18, 19], particularly learning from heterogeneous graph [20]. Third, fusing different kinds of information from sample attributes and node representation is difficult for their inherent heterogeneity and high-order characteristics.

To address the above challenges, in this paper, we propose a weighted heterogeneous graph embedding and deep learning-based fraud detection approach, namely, GFD, to identify fraudulent apps for mobile advertising. In the proposed GFD approach, (i) considering behavior patterns between users, mobile apps, and mobile ads, we construct a weighted heterogeneous graph to represent mobile app advertising behavior and propose a new weighted metapath to vector algorithm, namely, WMP2vec, to learn low-dimensional latent representation (graph-based features) for apps’ nodes in the weighted heterogeneous graph (ii) we use a time window based statistical analysis method to extract intrinsic features (attribute-based features) from the tabular sample data (iii) we present a hybrid convolutional neural network model to fuse graph-based features and attribute-based features for classifying the fraudulent apps from normal apps.

We evaluate GFD approach and WMP2vec algorithm on a real-world dataset from one of the mobile advertising platforms in China. Results show that WMP2vec reaches higher performance than three well-known graph embedding algorithms in the constructed weighted heterogeneous graph, and GFD approach achieves highest classification performance compared with Support Vector Machine (SVM), Random Forest (RF), and Fully Connected Neural Networks (FCNN).

The rest of the paper is organized as follows. We introduce GFD approach to detect fraudulent apps with deep neural networks and heterogeneous graph embedding algorithm WMP2vec in Section 2. We present the experimental results and discussion in Section 3. In Section 4, we introduce the related work. We conclude this paper in Section 5.

2. Proposed Approach

The flow chart of the proposed GFD approach is shown in Figure 1. First, we propose a weighted heterogeneous graph embedding method to learn the node representation, including constructing the weighted heterogeneous graph and the WMP2vec algorithm. Second, we use statistical analysis method to extract attribute-based features from the tabular sample data. Third, we introduce the deep neural networks to fuse the attribute-based features and graph-based features for identifying fraudulent apps from normal ones.

2.1. Data Description

We collect advertising log data of mobile apps from a mobile advertising platform. Our mobile advertisement dataset contains the following attributes: user ID, a code to identify a unique mobile user app ID, a code to identify a unique mobile app ad ID, a code to identify a unique mobile advertisement geographical attributes, a series of user geographical attributes used to detect anomalies, including encrypted IP and city action type, user behavior related to the ads, such as viewing, clicking, app downloading start, app downloading completion, and app installation completion action time, the time-stamp when the action happened and device attribute, user device related attributes, such as device ID, device system models, and screen size.

A seven-day mobile advertising log dataset in June 2015 was studied in this paper, and some examples of our raw data are shown in Table 1.

D. How to create a QR Code to track GPS location

Using Scanova for a demo, here is a detailed guide on how to do it:

1. Go to Scanova and sign-up for a 14-day free trial

2. From QR Code categories, select the one you want. We’ll select Website URL QR Code for demo. When scanned, it takes end-users to see the encoded website

3. Enter the content you wish to encode (website link here) and click Create QR Code

4. A pop-up will appear prompting you to name and save the QR Code. In the same pop-up, you’ll see two options—Static and Dynamic. Click Dynamic

Next, in the same window, you’ll see the option—Get exact GPS location of scan. Click it and proceed to click Save.

5. Next, you’ll see three QR Code design options—standard black-and-white, custom with logo, and custom with background. You can proceed with either of the options

Note that if your use case is promotional, you must design your QR Code. It is a fact that customized QR Codes attract more scans than black-and-white ones. Hence, to attract maximum scans, design your QR Code.

6. Once your QR Code is ready, say after you’ve customized it, click Update and proceed to Download it

7. A window will pop-up prompting you to specify QR Code size and format. Once you specify the details, click Export

That’s it. Your QR Code has now been created. You can now add it to your print media promotions to track the exact GPS location of each scan. Now that you know how to create the QR Code, the next question is—

General requirements for all apps

The requirements in this section apply to both listed and unlisted public apps. Depending on how your app is configured, it might also need to meet the requirements in the Specific requirements for certain app configurations section below.

1. Prohibited and restricted app configurations

Prohibited app types

The following app types aren't permitted on the Shopify App Store:

  1. Apps that are pieces of standalone software that need to be downloaded to a computer - The Shopify App Store's distribution method is through the use of web applications. There currently isn't an infrastructure to distribute any other type of app safely and securely to our merchants.
  2. Apps that mostly rely on merchant or partner interaction to operate - Apps that rely on mainly person-to-person interactions should consider listing as a service in our Experts Marketplace.
  3. Apps that make little or no use of Shopify's APIs - Apps submitting to the Shopify App Store must make efficient use of Shopify APIs in order to function. This is to make the merchant experience better by using direct shop data and mitigate user error.
  4. Apps that falsify data to deceive merchants or buyers - These apps violate part C - Section 2.3 of our Partner Program Agreement as well as Section 7 of our Acceptable Use Policy.
  5. Apps that process payments outside of Shopify's checkout - Shopify can't guarantee the safety or security of an order that has been placed through an offsite or third party checkout.
  6. Multiple apps with overlapping functionality created by the same partner - If you want to list more than one app on the Shopify App Store, then each app must be clearly different from other apps that you've already listed. In some cases, you can combine multiple apps into one. See section C.2.4 of our Partner Program Agreement.
  7. Apps that host marketplaces on Shopify - Apps that connect merchants to marketplaces can't host those marketplaces on Shopify. Apps also can't let merchants turn their stores into marketplaces. To learn more about best practices for marketplace apps, see Build a sales channel.
  8. Apps that offer capital loans - These types of services are difficult to effectively monitor on an ongoing basis in a manner that ensures merchants are protected from unsound lending practices. In order to protect merchants from unintended risk, apps that lend capital to merchants are not able to be distributed through the Shopify App Store.
  9. Apps with restricted beta API scopes enabled - If your app has been granted access to beta testing API scopes, then you can't submit your app to the Shopify App Store. For announcements about when betas become publicly available, visit the Shopify Community forums Shopify Community forums.
  10. Apps that primarily function to share or provide merchant data to third parties - Apps that primarily function to share or provide merchant data to one or more third parties must have prior written consent from Shopify and must comply with our API Terms. Otherwise, they aren't eligible to be listed on the Shopify App Store. Each third party that receives merchant data using the app must agree to Shopify’s API Terms.
  11. Apps that connect merchants to external developers - If your app connects merchants to external agencies and freelancers, then your app isn't eligible to be distributed on the Shopify App Store.
  12. Embedded apps that don't use session tokens - Embedded apps submitting to the Shopify App Store must use session tokens to authenticate. Session tokens offer a better merchant experience and avoid service disruptions caused by third party cookies.

Unlisted app types

The following app type must remain unlisted on the Shopify App Store:

  1. Apps that work for merchants only on the Shopify Plus plans - Apps that are listed in the Shopify App Store must work for all merchants, regardless of what plan they have. Apps that work for only a subset of merchants can be approved, but can't be listed.
  2. Apps that are designed for and marketed to developers - Apps that contain core functionality intended for other developers can be approved, but can't be listed.

2. Installation and setup

A. Authentication

  1. When a merchant clicks Add App from your app's listing, your app must immediately authenticate using OAuth before any other steps occur, even if the merchant has previously installed and then uninstalled your app.

  1. A merchant must be able to authenticate and use your app on multiple stores, even if they share the same email address.

B. Permissions

Permissions are the levels of access that your app has to a merchant's store through the API. The permissions that you request are shown to the merchant on the OAuth handshake page, where the merchant can either grant or decline them.

  1. Merchants must be redirected to your app's user interface (UI) after they accept permissions access on the OAuth handshake page.
  2. Your app should request only the permissions that are necessary for it to function.
  3. You should only revoke API permissions to your app using the delete button located on the app setup page.

C. Setup and merchant workflows

  1. Your app must include in-app setup instructions that explain to merchants how to use it properly. These instructions must be written specifically for Shopify merchants, even if your app also connects to other platforms.

Your app must never request that a merchant generate and provide a private API key. The Shopify App Store lists only public applications.

Any connection that your app makes from its UI to either link to another shop or install other apps must go through the Shopify App Store listing first.

For merchant security, your app must not use pop-up windows for essential app functionality, like running OAuth or approving app charges. Avoiding the use of pop-up windows also protects your app from being compromised by pop-up blockers.

3. Functionality and quality

A. User interface

By offering a great user interface, you can make it easier for merchants to use your app to grow their businesses. Your app's user interface must meet the following requirements:

  1. Your app must have a user interface, including buttons, controls, setup or onboarding instructions, and features for merchants to interact with.

Need help designing and building your app's user interface? The resources at Shopify Polaris are a great place to start.

B. Billing

Shopify has an API-based billing system that supports different types of app charges. It bills merchants through the same system that's used for their Shopify subscription, and makes it easier for them to keep track their payments.

All charges associated with your app must go through the Billing API. You aren't permitted to use other payment methods or systems, unless you've been notified otherwise by Shopify. Contact us if you have any questions or concerns.

If your app has multiple pricing plans, then merchants must be able to upgrade and downgrade their plan without having to delete the app or contact support.

Enterprise-level pricing plans must be referenced in the Description of additional charges section of the pricing section of the app's listing.

Your app must not have billing cancelation errors. If a merchant initially declines a charge, then the billing modal must prompt the merchant to confirm the cancelation again. If a merchant declines a plan selection, then previously accepted plans must not be canceled.

C. State of the app


Merchants are busy, and every minute matters when running their businesses. By making sure that your app performs well, you can help merchants achieve their goals faster and spend more time on the problems that need their attention the most.

  1. Your app must be a stable, finished product when you submit it to the Shopify App Store. It shouldn't be in beta or an otherwise unfinished state. If your app is broken or has bugs, then it can discourage merchants from using it, and in some cases it might even interfere with their businesses.

4. App performance

For best practices and recommendations on app performance, refer to our app performance recommendations.

A. Performance score

  1. To be published in the Shopify App Store, your app must not reduce Lighthouse performance scores by more than 10%. Submissions are evaluated based on this criteria, using the testing methodology outlined in the section below.
  2. The performance ratio score that you’ve calculated should be included in section G. Testing Instructions in your submission form. Please provide a screenshot of your results. This information must be provided to our App Review Specialist prior to the review process.

B. Testing methodology

The tool used by Shopify to test app performance is Lighthouse. Lighthouse is an open-source, automated tool for improving the quality of web pages. Lighthouse is available in the Developer Tools panel of Google Chrome, so you can test your application directly in the browser.

To test your application in Google Chrome:

  1. Start with a clean install of a supported Shopify theme, such as Express, without your app or any other apps installed.
  2. From the home page of your test store, open Developer Tools in Chrome (View > Developer > Developer Tools).
  3. In Developer Tools, click the Lighthouse tab.
  4. Select Mobile from the device list, then click Generate Report.

  1. Install your app on your test store and verify that it loads correctly.
  2. Go to the Lighthouse tab, and click the Generate Report button.
  3. Write down the new Performance score. This is your ending score.
  4. Divide your ending score by your starting score. The result is your app's performance ratio.

For example, if your starting score was 84, and your ending score was 72, you would calculate 72 / 84 to see that your app’s performance ratio is 0.85.

Include your app's ratio in section G. Testing instructions of the app listing form when you submit your app for review.

Lighthouse scores can vary between runs. Consider running these tests frequently during your development, and averaging your scores across a few consecutive Lighthouse tests before submission.

5. App listing

Writing a Shopify App Store listing

The app listing is your first point of contact with a merchant, and it's where they'll look to see if your app is right for them. All approved public apps have a listing on the Shopify App Store, regardless of whether you choose to make it listed or unlisted.

The listing is often your biggest marketing tool — an effective app listing encourages Shopify merchants to try your app for themselves. Make sure that your app listing is clear, and that it answers the questions that a potential user might have.


If you're building a carrier integration that uses Fed-Ex, then you can't use the carrier's name in your app's branding. This is because of contractual agreements between Shopify Shipping and these carriers.

The app listing submission form lets you do the following:

  • highlight app features so merchants can easily see what your app can do for them
  • provide clear pricing information
  • specify which merchants can install your app

Follow these requirements and guidelines when you're filling out the app submission form to make sure that merchants can easily find your app, understand what they can use it for, and see how much it costs.

The Shopify logo must not be used in any of the graphic elements of your app listing, such as your key benefits images, or app icon.

Translate your app listing

If your app is available in multiple languages, then you can also make your app listing available in those languages to help your app reach a wider audience. You can add and delete translated app listings for any of the supported languages on the Shopify App Store.

Certain listing details can be managed only on your primary listing. If you have created translated listings for your app, then you can choose which one to set as your primary listing.


You should create translated listings only for languages that your app supports. Any translated listings that you create for languages that your app doesn't support will be removed from the Shopify App Store.

Add a translated listing

  1. Log in to your Partner Dashboard.
  2. Click Apps.
  3. Click the name of your app.
  4. Click App listings.
  5. Click Add translated listing.

You can use this form to edit the translated listing for your app in the language you chose. To change which listing you're editing, go back to the App listings page and choose another listing.

Before you can submit your app for review, you need to make sure there are no issues with any translated listings you've added. When there are no issues, you can submit all your translated listings by clicking Submit app.

Delete a translated listing

  1. Log in to your Partner Dashboard.
  2. Click Apps.
  3. Click the name of your app.
  4. Click App listings.
  5. Click the listing you want to delete.
  6. In the More actions drop-down list, click Delete listing.

A. App information


App listings must be free of inappropriate content and merchant data.

1. App name and tagline

The app name you enter in the app listing submission form must match the app name in your Partner Dashboard.

Your app name is an important part of how you brand yourself to merchants and how they refer to your app. Follow these requirements when deciding on an app name:

  1. The app name can't include the word "Shopify."
  2. The app name must be 30 characters or fewer.
  3. The app name can't be a generic description of your app's functionality, such as "Banner Slider." Your app name should be distinct and to the point.
  4. The app name can't include the name of your Shopify Partner account. For example, your app name can't be "App name by Shopify Partner account name". By default, we provide a "by Shopify Partner account name" suffix to your app name on the Shopify App Store.
  5. Your tagline should be unique and summarize your app to help promote it. Your tagline can't contain "Shopify" or the name of your Shopify Partner account.

2. App icon

You can add and update your app icon from the app submission form. When making your app icon, follow these guidelines:

  1. The app icon's dimensions should be 1200px by 1200px.
  2. Don't include text in your app icon.
  3. Don't include screenshots or photographs in your app icon.
  4. Use padding around your app icon. Your logo shouldn't touch the edge of the image.
  5. Keep the corners square. The image's corners are automatically rounded when it's displayed.
  6. Use bold colors and recognizable patterns.
  7. Make it simple and focus on one or two elements. Visual clutter can make an image less effective.

3. Search terms

The Search terms field lets you enter a maximum of five search terms for your app. To help merchants discover your app, include only relevant terms that you want to rank higher when merchants search the Shopify App Store.

Only listed appear in Shopify App Store search results. By default, apps are listed when they're approved.

Follow these guidelines when picking your search terms:

  1. Use complete words. For example, use "dropshipping" instead of "dropshi" or another partial form of the word.
  2. Include the single, complete form of a term instead of several versions of the same term. For example, if you include "dropshipping" as a search term, then you don't need to include other terms such as "dropship", "shipping," or "drop ship."
  3. Don't include "Shopify" in any of your search terms.
  4. Don't list your competitors as a search term. If you do, then we'll reject your app submission.
  5. Don't convey more than one idea in a single search term. For example, "email marketing" is appropriate, but "email marketing for leads" is not.

4. App listing content

Your app listing content should describe your app's features at a high level. When creating your app listing content, follow these guidelines:

  1. Remove references to your other apps and services from your app listing content.
  2. Don’t list your competitors in your app listing content.

We won't reject your app solely if you list competitors in your app listing content. However, we recommend focusing on your own app's features instead of your competitors.

B. App details

1. Promotional video

A promotional video isn't mandatory, but we strongly recommend including one to help show merchants more about your app. The promotional video should be created to promote the core features and functionality of your app and how it interacts with Shopify. Merchants want an honest picture of what to expect from your app and how it will help them run their businesses. An effective promotional video will encourage the merchant to take a deeper look through your app listing to learn more about the features that were introduced in the video.

Follow these guidelines when making your promotional video:

  1. The video should be no longer than 2-3 minutes.
  2. Don't include long screencasts of someone using the application. Up to 25% of the video can use screencasts for demoing features, but the video should be promotional, not instructional.
  3. Be mindful of any third-party logos or elements that you include in the promotional video to avoid potential trademark issues.

2. Key benefits

This section lets you highlight three key benefits that your app offers to merchants. You can include an image for each benefit and a brief description about the problem that each benefit solves.

Make sure to use this space to speak to the merchant's needs, not the specifics of how a particular feature works. You can talk about specific features in the Detailed description section.

Here are some examples of how you can write an app feature as a benefit that will appeal to merchants:

Data when you need it

Get your real-time sales data all in one view

Easy-to-read charts

Spot trends easily with graphically displayed data

Stay in the loop

Get notified about any significant spikes or dips

Spend less time writing emails

Quickly and easily create reusable email templates

Follow these guidelines when you're preparing images for your app's key benefits:

  1. Each image's dimensions should be 1600px by 1200px (4:3).
  2. Don't use text in your images.
  3. Don't use screenshots.
  4. Don't include the Shopify logo in your images.
  5. Keep the corners square. The image's corners are automatically rounded when it's displayed.
  6. Avoid using a white background. Instead, use bold, recognizable colors or patterns.
  7. Make it simple and focus on one or two elements. Visual clutter can make an image less effective.
  8. Be consistent. The icon and key benefits images for your app should look like they belong to the same brand and product.

Here's an example of how the key benefits for your app will be presented on a Shopify App Store listing:

3. Featured app banner (optional)

We regularly feature outstanding apps on the Shopify App Store homepage and on our social media channels. If you want us to consider featuring your app, then you need to provide an image that can be used to showcase your app.

Follow these guidelines when you're preparing your featured app image:

  1. The banner image's dimensions should be 1600px by 900px.
  2. Don't include any text in the banner except for your app name.
  3. Keep the corners square. The banner's corners are automatically rounded when it's displayed.
  4. Leave a margin of 100px around the outside edges of the image. Keep the icon and app name inside the safe zone, as shown in the example images below.
  5. Avoid using a white background. Instead, use bold, recognizable colors, patterns, or photography.
  6. Be consistent. The icon, benefits, and featured app banner images for your app should all look like they belong to the same brand and product.
  7. Don't use screenshots of your application. Screenshots are too small to see at the size that the banner appears on the Shopify App Store homepage.

It's a good idea to use the template provided to create your featured app banner image. This template outlines a safe zone for placing your app name and icon. Before you generate your final image, make sure that you remove the embedded assistance elements, such as the help text and the dotted line highlighting the safe zone.

The following example images show the correct and incorrect placement of these elements relative to the safe zone.

Incorrect placement of app icon and name:

Correct placement of app icon and name:

4. Screenshots

In the Screenshots section, you must provide screenshots to show what your user interface looks like in action. Add annotations or highlighting to draw attention to important elements, such as any links that your app inserts in the Shopify admin.

Follow these guidelines when you're preparing screenshots:

A) General screenshot guidelines

  1. Provide alt text for all images for accessibility and to improve SEO.
  2. Don't use a merchant's personal information without consent in the images. This includes information like store names, phone numbers, and URLs.

B) Desktop screenshot guidelines

  1. Each screenshot's dimensions should be 1600px by 900px (16:9) for desktop, and 900px by 1600px (9:16) for mobile.
  2. Include between 3-6 screenshots of your app on desktop.
  3. Include at least one screenshot of your app's user interface.
  4. Provide alt text for all images for accessibility and to improve SEO.
  5. Don't include desktop backgrounds and browser windows in your screenshots. Crop them so your images aren't cluttered and don't distract merchants from your app.
  6. If your app is embedded, then don't include Shopify admin header content in your screenshots, such as the store name, the search bar, or any user information. You can include the left-hand navigation.

C) Mobile screenshot guidelines

  1. Each screenshot's dimensions should be 900px by 1600px (9:16).
  2. If your app is mobile responsive on the storefront, then include screenshots that show your app's mobile functionality. This helps merchants visualize how your app will look to a customer on their storefront.
  3. Your mobile screenshots should not be duplicates of your desktop screenshots. This means they must display the responsiveness of your user interface when viewed on a mobile device.

D) Point of sale screenshot guidelines

  1. Each screenshot's dimensions should be 2048px by 1536px (4:3).
  2. If your app is for Shopify Point of Sale or has features that work with it, then you must include a screenshot showing this. This helps merchants specifically looking for point of sale apps understand that yours integrates with it.

5. Detailed description

The Detailed description field gives you 2800 characters to tell merchants all about your app. This field supports a limited set of Markdown formatting options. Markdown is simpler to use and less error-prone than HTML because it requires fewer tags.

The following table lists supported formatting options and the corresponding Markdown notation to use:

Format Tag Example
Title # # This is a title
Ordered (numbered) list item 1. 1. Ordered list item 1
2. Ordered list item 2
Unordered (bulleted) list item * * Unordered list item 1
* Unordered list item 2

You can toggle between the Edit and Preview tabs to see how your description will be displayed in the app listing.

Follow these guidelines when writing your detailed description:

  1. Explain each of your app's key features in detail. Merchants want to know what your app is capable of doing for their store.
  2. Don't use special characters or emojis in your description.
  3. Don't include testimonials in the detailed description.
  4. Don't use personal merchant information without consent from the merchant.
  5. Don't include links and URLs in the detailed description. The submission form lets you provide links to your website's homepage, your FAQ page, and your pricing information, where you can host whatever additional information.
  6. Don't include support information such as emails and phone numbers in your detailed description. Support information should be included in section D of the submission form.
  7. Don't include data or statistics in your detailed description since Shopify can't confirm this data. Feel free to share this information on your website and landing pages.
  8. Don't mention Shopify competitors except in specific cases (Example: If your app is mentioning how it migrates data from other platforms to Shopify).

6. Demo URL

Provide a link to a demo store that showcases your app so merchants can see a live demonstration of how the app works. If your app requires a more in-depth walkthrough, then you can instead link to a demo video that shows the app in action. This lets the merchant get a sense of how your app can benefit them.

You can use a development store as your demo store. When merchants visit your demo store from the Shopify App Store, the development store password page does not appear.

7. Integrations

The Integrations field lets you list a maximum of six integrations. If your app has more than six integrations, then list the ones that merchants will be most interested in.

Don't include the following in your list of supported integrations:

  1. Shopify
  2. other shopping carts, unless you provide synchronization or cross-platform compatibility
  3. other apps in the Shopify App Store, unless your app directly integrates with them

C. Pricing

The pricing section lets you clarify app pricing information for merchants.

1. Pricing details

Select your app's primary billing method in the Pricing details section. There are three primary billing methods that you can use for your app:

Free to install Select this option if you won't charge the merchant anything for installing the app. Apps that are free to install can have additional usage charges or charges that are charged outside of the Shopify Billing API. If there are no additional charges, such as commissions or usage charges, then your app will appear as Free in the Shopify App Store. If you do specify additional charges, then your app will appear as Free to install.
Recurring charge Select this option if you will charge the merchant each month (every 30 days) or each year that they have the app installed. If you select this option, then you'll be able to add information about the different monthly or yearly plans that you offer.
One-time payment Select this option if you will charge the merchant a single fee for installing the app.

Any of the billing methods above can be combined with additional charges or external account charges. For example, if you charge a $10 one-time charge and $2 per 100 orders, then select One-time charge and provide details about the usage charges in the Additional charges section.

Set up an app subscription plan with recurring charges

To describe how merchants will be charged for using your app:

Enter the length of the free trial period, after which you will begin to charge for the app. If the free trial length is 0 days, then charges begin immediately. When you choose the length of the free trial period, make sure that it's enough time (at least 14 days) for the merchant to try your app.

Enter the details of your recurring plans. For each plan, specify whether it is free, billed monthly, or billed yearly:

  1. If your app charges the merchant monthly, then select Monthly charge and enter the amount that the merchant will be charged every 30-day billing cycle.
  2. If you offer a monthly plan that also has a discount option for the merchant to make a one-time yearly payment, then select Monthly charge and enter both the regular monthly charge and the discounted yearly charge. For example, if you have a plan that is $150 per month and you offer a yearly discounted price of $1200 a year, then enter $150 for the amount billed every 30 days and $1200 for the amount billed as one charge per year:
  3. If you offer a plan with a recurring charge that has only a yearly charge option, then select Yearly charge and enter the total charge per year. For example, if you have a yearly plan that is $1200, then enter $1200 for the amount billed as one charge per year:
  4. Select whether your plan has additional charges, such as usage fees or commissions. Provide a detailed description of these fees so that the merchant can understand how the charges are calculated. Do not enter yearly plan information in this field. Instead, enter yearly plan information either as a yearly charge or a yearly discounted price.
  5. Optional: In the Plan details section, enter a name for the plan and a list of features that it includes. Enter each feature on a separate line, without any bullet points or leading characters. Bullet points will be added when the feature list is rendered in the app listing.
  6. If you want to add another plan, then click Add another plan.
  7. The app listing lets you describe up to four pricing plans for your app. If you offer more than four plans, then you can provide a URL for an external pricing page that describes the additional plans. You can also let merchants know that you offer additional plans by selecting This plan has additional charges for one of the plans (typically the plan with the highest price) and then entering a note in the Description of additional charges field. For example, the note might say "Additional plans available. See our pricing page for details."

Plans will be displayed from lowest price to highest price in your app listing, regardless of the order in which you specify the plans.

Apps with only a free plan

You can have a maximum of one free plan. If your app has only one plan for the entire app, and that plan is free, then that plan cannot be listed as a recurring charge. For this type of a pricing model (with or without additional charges), select Free to install as your primary billing method.

Apps with free and paid plans

If you have more than one plan and one of them is free, select Recurring charge as your primary billing method, then specify one of your plans as Free in the Plan pricing section. When your app appears in search results, it will be flagged as Free plan available.

Charges outside the Shopify Billing API

All app charges must go through the Shopify Billing API unless you have prior approval from Shopify. If you've received approval from Shopify, then select I have approval to charge merchants outside of the Shopify Billing API and provide a link so that merchants can read about the external charges and sign up for any external services that are required.

Here's an example of how the pricing details for your app might be presented in your app listing:

1. A link to a page that describes the app's pricing in detail.
2. A link to a page that describes any charges that are billed outside of Shopify's Billing API.
3. The name of each pricing plan.
4. A free monthly plan.
5. The paid monthly plan price.
6. The discounted yearly price for a monthly plan.
7. A description of any additional charges for this plan.
8. A list of features for this plan.

D. Contact information

Contact information is an important part of your app listing. The information you enter here helps merchants learn more about your app and contact you with questions or issues. Shopify also uses this information to contact you about your app submission.

1. Review notification email

This email is used to notify you when a merchant has left a review on your app. The notification email includes the star rating the merchant left, the comment they left in their review, and the name of the merchant's store.

2. App submission contact email

This is the email we use to contact you about your app submission to the Shopify App Store. You should enter the email of the person that will be the primary point of contact for making any necessary changes to your app submission.

3. Sales and support

Support for other languages (Required)

If you've added a translated listing to your app listing, then you need to show if you offer phone or email support in the language that's associated with it. You aren't required to offer support in the language of the translated listing, but you must include information in your listing about whether that support is available.

Email (Required)

This is the email that merchants will use to contact you if they have support questions.

Website URL (Optional)

Having a website that gives more information about your app can help merchants to decide if they want to install it. This URL needs to be set to the landing page of your developer website. If the URL goes to a special promotional page, then you'll be asked to change it.

Phone (Optional)

Having phone support can boost merchant confidence when selecting your app. If you want to offer phone support for your app, then you need to include a functioning phone number that a merchant can call to get phone support. We'll call this phone number during your app review to make sure it can be reached. If the number can't be reached, then you must remove or update the phone number.

Privacy policy URL (Required)

[Data and user privacy]/api/app-store/listing-in-the-app-store/data-and-user-privacy) is extremely important to merchants, and they value partners who take security seriously. To learn what you should include in your privacy policy, refer to the App privacy policy template.

FAQ URL (Optional)

This is a great opportunity to answer frequently asked questions in detail to merchants. This URL must redirect the merchant to a dedicated FAQ page on your website. If the URL redirects to a cloud document or PDF, then you'll be asked to change it.

E. Tracking

You can track your app listing traffic by entering a Google Analytics or Facebook pixel code for your app listing. You can also retarget merchants who view your app listing by adding a Google remarketing code or an AdRoll retargeting code.

F. Merchant install requirements

You can specify which merchants can install your app by setting the install requirements in the app submission form. By adding install requirements in the app submission form, you can reduce the number of uninstalls and negative reviews related to merchant eligibility for your app.

For example, when a merchant installs an app that they can't use, such as a free shipping app that doesn't work in their country, they will uninstall your app shortly after installing it. They may also be frustrated about the experience and leave a negative review. Both uninstalls and negative reviews affect your ranking in the Shopify App Store.

1. Sales channel requirements

If your app embeds features in a particular sales channel, then you only want merchants who use that sales channel to install your app. For example, if a merchant doesn't have an online store, then you want to prevent them from installing your app if it changes the merchant's online store.

If your app embeds features in a merchant's online store, then select Merchant must have online store. If your app embeds features in the Shopify POS app, then select Merchant must have Shopify Point of Sale.

2. Geography requirements

Set the geography requirements to make your app available only to merchants who meet specific geographic criteria. For example, if your app is a tax app that helps merchants in Germany file their taxes, then you should specify that only merchants with a business address in Germany can install your app. You can restrict the installation of your app to merchants who:

  • have a business address in a specific country or countries
  • ship to a specific country or countries
  • accept a specific currency or currencies.

For each requirement, you can specify a list of countries or currencies that meet the requirement. For example, if your app works for stores who accept any of USD, CAD or GBP, then you can specify all three acceptable currencies.

If you specify multiple geographic requirements, then only merchants who meet all of the requirements can install the app.

What if a merchant changes their store settings after installation?

Within your app, use endpoints and webhooks to check if a merchant changes their store settings after installation. If a merchant does change their settings, then you can notify them within the app or by email.

G. Testing instructions

In this section, you can provide instructions on how to test your app during your app review. You also need to include your app's performance ratio. To calculate your app's performance ratio, refer to B. Testing methodology in section 4. App performance of this document.

1. App testing instructions

Including instructions on how your app should be used lets us give you valuable feedback if they encounter issues while testing. If you have an app that offers a lot of functionality, then you should consider including a link to a video walkthrough of your app. This helps us understand how to use your app.

If your app connects to other services, then you must include test accounts. For example, if your app requires account access to a marketplace, then you must include credentials for a test account on that marketplace. If testing your app requires a test account and you don't provide one, then your app submission will be rejected.

6. Security and merchant risk

A. Security

Your app must store salted password hashes instead of actual passwords, as described on OWASP.

Your app must be protected against cross-site request forgery attacks, cross-site scripting attacks, and other security vulnerabilities.

Your app must be served over HTTPS using a valid SSL certificate.

Your app must not process payments or orders outside of Shopify's checkout.

Your app must not alter or modify Shopify's checkout.

7. Data and user privacy

A. Data and user privacy

If your app is used by merchants based in Europe, or merchants with buyers based in Europe, then it's your responsibility to make sure that your app is GDPR compliant.

You must include a link to a privacy policy in your app listing to communicate how your app uses data, and to help build trust with merchants.

If your app handles a significant amount of customer data, then it should have a system in place to manage that data properly, including secure storage and the ability to erase data at the user's request as per the data rights of individuals.

If your app runs marketing or advertising campaigns that require personal information, then it must have a system for allowing users to provide data consent for marketing promotions.

If your app requests or manages user data, then it must subscribe to the GDPR webhooks so that you can receive any data deletion requests that are issued by merchants.

Customer data collected by your app through a Shopify hosted service using the Online Store/Point of Sale channels must be returned to the Shopify admin and be made accessible to merchants. More information can be found in the Shopify API License and Terms of Use under section 2.3.17. See Storing customer data for information regarding which customer data must be sent back to the merchant.

8. Support

A. Support

You must have an email address that merchants can use to contact you if they need help with setting up or using your app. Providing great customer support is an important part of Shopify's own business, and you're expected to provide prompt support to the merchants who use your app as well.

Your support contact information and content should be easy to find, and it should include clear instructions that are specific to how your app integrates with Shopify. To learn more about writing effective help documentation, see Help documentation in Shopify Polaris.

Your partner dashboard must have up to date emergency developer contact information in the case that you need to be contacted regarding your app.

Embedding feature chart/graph in pop-up window in CartoDB? - Geographic Information Systems

Pixels to Graphs by Associative Embedding

Tensorflow training pipeline for:

Pixels to Graphs by Associative Embedding. Alejandro Newell and Jia Deng. Neural Information Processing Systems (NIPS), 2017. arXiv:1706.07365

Update (March 25, 2018): Changed default optimization to deal with diverging models, so code should no longer freeze in the middle of training. Also, finally added pretrained models!

Python 3 package requirements:

(code tested on Python 3.5 and 3.6)

  • tensorflow_gpu (1.3.0)
  • numpy
  • h5py
  • scipy
  • scikit-image
  • tqdm
  • easydict
  • graphviz
  • simplejson (for Visual Genome driver)

Make sure to add the parent directory of px2graph to your PYTHONPATH.

  • Clone repo from here
  • Follow build instructions (make sure to use g++ 4.X)
  • For newer versions of TensorFlow it was a bit difficult to get this working, here is the command that finally worked for me:
  • Download images from Visual Genome (parts 1 and 2)
  • Place all images into data/genome/VG_100K/
  • Download VG-SGG.h5 and proposals.h5 from here and place them in data/genome/ (credit to Xu et al. 'Scene Graph Generation by Iterative Message Passing' for preprocessing the Visual Genome annotations)

python -e [experiment name] --sg_task [PR|CL|SG]

The different task settings are defined as follows:

  • PR: Object boxes and classes provided, predict relationships
  • CL: Object boxes provided, classify objects and their relationships
  • SG: Full task, nothing but image required as input (an additional argument --use_rpn [0|1] determines whether or not to include box proposals from a RPN)

To train with multiple GPUs use a command like:

python --batchsize 32 --gpu_choice '0,1,2,3'

To continue an experiment or branch off to a new directory (to test different hyperparameters for example), call:

python -e test_exp --continue 1 or python --branch test_exp -e test_exp_2 --learning_rate 1e-5

In general, any binary options you wish to change via the command line must be set explicitly with either a 0 or 1. Use --help to get a list of available options to set.

Important: Regarding optimization, some feature of the code can lead to spontaneous divergence in the midst of training

The recall logged during training should give a good sense of the performance of the model. After training, to generate a proper set of predictions and evaluate them, call:

The --predict argument accepts train|valid|test as options, and will generate predictions on the first opt.valid_iters * opt.batchsize samples of the specified subset.

Note, performance is higher than previously reported in our paper. This is not due to any changes in the algorithm, but instead is the result of training for longer and tuning some postprocessing parameters.

Another important detail regarding our evaluation is that our numbers are reported with unconstrained graphs meaning that when proposing the top 50 or 100 predicates, multiple edges may be proposed between any two nodes. This leads to a notable performance difference when comparing to numbers in a constrained setting particularly on the SGCls and PredCls tasks where nodes are provided ahead of time.

To get final test set predictions from the pretrained models, put them in the exp/ directory and call:

Getting Started

Accessing Fusion Tables

To use Google Fusion Tables, you'll need a non-HaverApps Google Account. Your regular account does not work with Fusion Tables. If you don't already have one, you can create an account here.

Fusion Tables is accessed through Google Drive. There's a link to Drive on most Google pages, including your Gmail inbox and Google Search, or you can just click here.

Before using Fusion Tables, you may need to connect to the app. From Google Drive, click the CREATE button on the left side of the page and select Connect more apps. In the pop-up window, search "Fusion Tables" and click Connect. Now, if you go back to the Create menu, you should see Fusion Tables as an option. Click on it. You are now ready to begin the tutorials below, or you can spend some time familiarizing yourself with the interface.

JavaScript Charts widgets for data visualization and analytics

Webix JS is a graphing and charting library for designing outstanding analytical web applications and custom UIs. This software product allows implementing dynamic data visualization with smooth animation and several interactive features. Webix development team followed the top-notch material design trends to create a variety of ready-to-use responsive widgets.

JavaScript Charts widget is a highly-customizable set of JS charts (line, spline, area, bar, pie, 3D-pie, donut, scatter, radar, etc.). The interactive UI controls include 14 types of charts and data tools such as sorting, filtering, and grouping.

Pivot Chart JavaScript UI widget facilitates smooth data aggregation and visualization by means of different chart types and data-structure sets. Data export feature allows converting information in PDF, PNG, Excel, and CVS formats. The widget provides seamless back-end and front-end integration.

Gage (Gauge) JavaScript widget is aimed to display dynamic data with the help of smooth and interactive animation. The widget enables to set up custom labels, placeholders, and dynamic colour change.

Bullet graph widget serves for efficient presentation of rapidly changing information, as well as for the creation of data-rich dashboards . This component has out-of-the-box design with smooth animation. A user can choose vertical or horizontal orientation depending on an app layout.

Barcode is a widget that displays text values in a machine-readable format. It provides an opportunity to easily embed generated barcodes into your applications. It includes three types of barcodes: EAN8, EAN13, and UPC-A. The width and the height of the barcode itself and the text are editable. Besides, there is a possibility to create a personal barcode.

Excel Viewer is a tool for viewing Excel files. The files may be loaded by setting a remote/local URL or parsing the contents of an uploaded file by using the related Webix API. The widget is easily editable. The toolbar contains tabs that allow switching between sheets.

GeoChart provides integrating Google maps into any application. It may be used in developing visual analytical systems. All Google GeoChart settings are available. The data is loaded into GeoChart in JSON, XML, or CSV formats.

Iframe is one of the three widgets that allow adding HTML content to applications. It allows embedding any external documents and web pages to an application. Several web pages may be shown with the help of the widget. Easy navigation is also provided.

Map UI widget is based on Google Maps API. It is a handy tool for applications that intend to use geographical visualization. The widget supports four map types: roadmap, satellite, hybrid, and terrain. Markers and heatmap layers are customizable.

Organogram intends to create hierarchical diagrams with links between data items. The API is similar to JS Tree UI widget. The items are easily configured and styled with CSS. Selection functionality is enabled. The lists inside each block of items are editable and can be arranged in different ways.

PDF Viewer provides the possibility of viewing PDF files into any web application. The PDF documents can be viewed, downloaded, and uploaded. The toolbar of the widget includes navigation arrows, the current page label, the "all pages" label, zooming buttons, and the download button. The public API allows using the toolbar separately from the viewer.

Template is one of the three widgets that allow adding HTML content to applications. There are four predefined types of Templates provided by Webix: with a thin grey border, borderless, "header" for parts of the app interface, and "section" from blocks of Form controls. The content of Template can be either plain text, or HTML markup with text, or a single data item. Template API allows setting the content dynamically.

TreeMap allows you to present the data in a set of nested rectangles. It helps to arrange the information in a compact form. The widget is flexible, so any style may be applied. Clicking on each item allows displaying the child items, which adds to the compactness of the application.

Video widget is one of the three widgets that allow adding HTML content to applications. The widget helps to embed video files into applications. It is based on HTML5 "video" tag and provides support for MP4, WebM, and Ogg video files. Video API is easily customizable.