CINXE.COM
Make an App with No-Code. Start building today for free.
<!doctype html> <html lang="en" class="newLayout "> <head><script type="text/javascript" src="/_static/js/bundle-playback.js?v=HxkREWBo" charset="utf-8"></script> <script type="text/javascript" src="/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script> <script>window.RufflePlayer=window.RufflePlayer||{};window.RufflePlayer.config={"autoplay":"on","unmuteOverlay":"hidden"};</script> <script type="text/javascript" src="/_static/js/ruffle/ruffle.js"></script> <script type="text/javascript"> __wm.init("https://web.archive.org/web"); __wm.wombat("https://www.appsheet.com/","20210812205235","https://web.archive.org/","web","/_static/", "1628801555"); </script> <link rel="stylesheet" type="text/css" href="/_static/css/banner-styles.css?v=S1zqJCYt" /> <link rel="stylesheet" type="text/css" href="/_static/css/iconochive.css?v=3PDvdIFv" /> <!-- End Wayback Rewrite JS Include --> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="apple-itunes-app" content="app-id=732548900"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Make an App with No-Code. Start building today for free.</title> <meta name="description" content="Make apps with no-code. AppSheet's no-code app building platform allows you to quickly build apps to collect, or connect to, data. Start building for free now."> <meta name="keywords" content="app maker, mobile app maker, app creator, android app maker, google app maker, free app maker"> <meta name="author" content="AppSheet"/> <meta name="google-site-verification" content="97jAB4aUdRiLxKkCyBUhJnpDEWTQAJ6tOzUKFwE1p8w"/> <meta name="google-site-verification" content="qPkt9TxKqz8fFiALwco4ddvCCsGNrgRwTuE1aCBxG1k"/> <meta property="og:title" content="AppSheet : mobile apps from spreadsheets : "/> <meta property="og:image" content="/web/20210812205235im_/https://www.appsheet.com/"/> <meta property="og:site_name" content="AppSheet"/> <link rel="canonical" href="https://web.archive.org/web/20210812205235/https://www.appsheet.com/"/> <link rel="shortcut icon" href="/web/20210812205235im_/https://www.appsheet.com/Content/img/Favicon-Material.png" sizes="16x16"/> <link rel="shortcut icon" href="/web/20210812205235im_/https://www.appsheet.com/Content/img/Favicon-Material.png" sizes="32X32"/> <link href="/web/20210812205235cs_/https://www.appsheet.com/content/build/web-main-material.css?v='20210810'.1" rel="stylesheet" type="text/css" media="screen, print"/> <link href="https://web.archive.org/web/20210812205235cs_/https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700,700i" rel="stylesheet"> <link rel="stylesheet" href="/web/20210812205235cs_/https://www.appsheet.com/Content/css/instantsearch-1.12.1.min.css"> <script nonce="udm6U3KxMohxJZtmbGdaLw==" src="/web/20210812205235js_/https://www.appsheet.com/Content/scripts/web/navbar.js"></script> <script type="application/ld+json"> { "@context": "https://web.archive.org/web/20210812205235/http://schema.org", "@type": "Organization", "url": "https://web.archive.org/web/20210812205235/https://www.appsheet.com", "logo": "https://web.archive.org/web/20210812205235/https://www.appsheet.com/Content/img/logo/material/logomark.png" } </script> <script nonce="udm6U3KxMohxJZtmbGdaLw==" src="/web/20210812205235js_/https://www.appsheet.com/content/build/logging-main.js?v='20210810'.1"></script> <script nonce="udm6U3KxMohxJZtmbGdaLw=="> window.JeeneeAnalyticsNewUser = false; <!-- Google Tag Manager --> (function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://web.archive.org/web/20210812205235/https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); var k = d.createElement(s); k.src = 'https://web.archive.org/web/20210812205235/https://www.googleoptimize.com/optimize.js?id=OPT-P4M9XQT'; f = d.getElementsByTagName(s)[0]; f.parentNode.insertBefore(k, f); })(window, document, 'script', 'dataLayer', 'GTM-N6QM4V3'); <!-- End Google Tag Manager --> </script> <script nonce="udm6U3KxMohxJZtmbGdaLw==" type="text/javascript"> (function (f, b) { if (!b.__SV) { var a, e, i, g; window.mixpanel = b; b._i = []; b.init = function (a, e, d) { function f(b, h) { var a = h.split("."); 2 == a.length && (b = b[a[0]], h = a[1]); b[h] = function () { b.push([h].concat(Array.prototype.slice.call(arguments, 0))) } } var c = b; "undefined" !== typeof d ? c = b[d] = [] : d = "mixpanel"; c.people = c.people || []; c.toString = function (b) { var a = "mixpanel"; "mixpanel" !== d && (a += "." + d); b || (a += " (stub)"); return a }; c.people.toString = function () { return c.toString(1) + ".people (stub)" }; i = "disable track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config people.set people.set_once people.increment people.append people.track_charge people.clear_charges people.delete_user".split(" "); for (g = 0; g < i.length; g++) f(c, i[g]); b._i.push([a, e, d]) }; b.__SV = 1.2; a = f.createElement("script"); a.type = "text/javascript"; a.async = !0; a.src = "/Content/scripts/_shared/external/mixpanel-2.2.min.js"; e = f.getElementsByTagName("script")[0]; e.parentNode.insertBefore(a, e) } })(document, window.mixpanel || []); // Code to manage mixpanel initialization. Calling mixpanel.init is // async and takes a 'loaded' callback argument. The code below creates a window // global object that allows other parts of the code to register callbacks. Callers // should use window.mixpanelLoader.onLoad(cb). Note: this is only implemented for // the AppSheet Web mixpanel instance. TODO: make it work for both mixpanel projects. window.mixpanelLoader = (function () { var callbacks = [] var isLoaded = false return { // The method that callers should use onLoad: function (cb) { if (isLoaded) { cb() } else { callbacks.push(cb) } }, // The callback that is passed to mixpanel.init loaded: function () { isLoaded = true callbacks.forEach(function (cb) { cb() }) } } })() mixpanel.init('f3f157a3585cb23361a9ace882b7611e', { loaded: window.mixpanelLoader.loaded }); // Makes the AppSheet bucket accessible via mixpanel.appSheet.track(...) mixpanel.init('6460a5084cbe5c139b2cd70d800f9fa0', {}, "appSheet"); // Needed to access the web bucket in a special case for app signups converting app creators mixpanel.init('f3f157a3585cb23361a9ace882b7611e', {}, "web"); </script> <script nonce="udm6U3KxMohxJZtmbGdaLw==" type="text/javascript"> // http://stackoverflow.com/questions/25851345/tracking-utm-campaign-params-with-mixpanel-as-people-properties function getQueryStrings() { var assoc = {}; var decode = function (s) { return decodeURIComponent(s.replace(/\+/g, " ")); }; var queryString = location.search.substring(1); var keyValues = queryString.split('&'); for (var i in keyValues) { var key = keyValues[i].split('='); if (key.length > 1) { assoc[decode(key[0])] = decode(key[1]); } } return assoc; } function addDefaultProperties(properties) { if (properties == null) { properties = {}; } var linkFrom = ''; properties.linkedFrom = linkFrom; properties.user = ''; return properties } function setUTMPropertiesOnUser() { var params = getQueryStrings(); for (var i in params) { var match = /utm_[a-z]+/ if (match.test(i)) { var value = params[i]; mixpanel.people.set_once(i, value); } } } /** * Checks whether all of the UTM fields are empty in local storage. */ function hasNoSetUtmFields() { return ( window.localStorage.getItem('JeeneeNewUserCampaign') == null && window.localStorage.getItem('JeeneeNewUserSource') == null && window.localStorage.getItem('JeeneeNewUserMedium') == null && window.localStorage.getItem('JeeneeNewUserContent') == null && window.localStorage.getItem('JeeneeNewUserTerm') == null ); } /** * Checks for UTM fields in URL params. */ function hasUtmFieldsUrlparams(queryParams) { return ( queryParams.hasOwnProperty('utm_campaign') || queryParams.hasOwnProperty('utm_source') || queryParams.hasOwnProperty('utm_medium') || queryParams.hasOwnProperty('utm_content') || queryParams.hasOwnProperty('utm_term') ); } /** * Sets UTM fields to direct/default values in local storage * when none are passed in via the URL upon user's first visit. * utm_content and utm_term are left undefined for direct and organic traffic. */ function setDefaultUtmPropertiesOnUserLocalStorage() { window.localStorage.setItem('JeeneeNewUserCampaign', 'direct'); window.localStorage.setItem('JeeneeNewUserSource', 'direct'); window.localStorage.setItem('JeeneeNewUserMedium', 'none'); } /** * Sets UTM values in local storage. Only process UTM parameters within the URL when * all of UTM fields in local storage are undefined. This ensures first touch attribution. * utm_campaign, utm_source, and utm_medium are required fields for every campaign, CTA, etc. * Seeing any of these fields as undefined is an indication that there are invalid UTM parameters in the URL. * utm_content and utm_term are optional. */ function setUTMPropertiesOnUserLocalStorage() { if (hasNoSetUtmFields()) { var queryParams = getQueryStrings(); if (hasUtmFieldsUrlparams(queryParams)) { if (queryParams['utm_campaign'] != null) { window.localStorage.setItem('JeeneeNewUserCampaign', queryParams['utm_campaign']); } if (queryParams['utm_source'] != null) { window.localStorage.setItem('JeeneeNewUserSource', queryParams['utm_source']); } if (queryParams['utm_medium'] != null) { window.localStorage.setItem('JeeneeNewUserMedium', queryParams['utm_medium']); } if (queryParams['utm_content'] != null) { window.localStorage.setItem('JeeneeNewUserContent', queryParams['utm_content']); } if (queryParams['utm_term'] != null) { window.localStorage.setItem('JeeneeNewUserTerm', queryParams['utm_term']); } } else { setDefaultUtmPropertiesOnUserLocalStorage(); } } } function TrackSimpleConcordEvent(eventName) { if (window.Concord && typeof window.Concord.TrackSimpleEvent === 'function') { window.Concord.TrackSimpleEvent(eventName); } } setUTMPropertiesOnUserLocalStorage(); /* Only use this function for non-webpack pages. Cannot pass props to Concord using this */ window.Track = function (event, properties, callback) { properties = addDefaultProperties(properties) mixpanel.track(event, properties, callback); } window.TrackSuperProp = function (properties) { mixpanel.register(properties) } window.TrackSuperPropOnce = function (properties) { mixpanel.register_once(properties) } window.TrackPeopleProp = function (properties) { mixpanel.people.set(properties) } window.TrackTabClick = function (pageName, tabName, properties) { properties = addDefaultProperties(properties); properties.zType = 'TabClick'; properties.zPage = pageName; properties.zTab = tabName; window.Track('Action', properties); TrackSimpleConcordEvent('Tab Click'); } window.TrackActionClick = function (pageName, buttonName, properties) { properties = addDefaultProperties(properties); properties.zType = 'ButtonClick'; properties.zPage = pageName; properties.zButton = buttonName; window.Track('Action', properties); // Need to create an event in EventName for each combo here otherwise it's not very useful // to just know that a user clicked on a button but not what it was TrackSimpleConcordEvent('Button Click ' + pageName + ' ' + buttonName); } // Use this function to track user link clicks. You need a special function for this, since // the browser reloads a new page when the user clicks a link, before Mixpanel has a chance to // log the event. The mixpanel.track_links method waits for 300ms before giving up and moving to // the new link. query should be a jquery selector for the links to track. eventName is the event name // passed to mixpanel. properties is either a function of the DOM node that was clicked that returns the // event props, or a constant object of event props. window.TrackLinks = function (query, eventName, properties) { var newProperties; if (typeof properties === 'function') { // Wrap the function so we get all of the default properites newProperties = function (node) { var result = properties(node) return addDefaultProperties(result) } } else { newProperties = addDefaultProperties(properties); } mixpanel.track_links(query, eventName, newProperties); } </script> <script type="text/javascript" nonce="udm6U3KxMohxJZtmbGdaLw=="> (function () { // Utility for running A/B tests on the website. An AB test is defined with a testName and an array of variants. // Each variant consists of a name, a jquery selector, and an initialize function that renders the variant in the website. // When a variant is run, the jquery selector is made visible and the initialize function is called. // The results of the test are saved to mixpanel. The test name is used as a super property in Mixpanel. The value // of the super property is the variant of the test that the user was shown. var ABTest = function (props) { this.name = props.name this.variants = props.variants this.defaultVariant = props.variants[0] this.initialized = false this.currentVariant = null // We need to know if mixpanel has been loaded and we can access the current user's properties. // You can pass in an onMixpanelLoad callback function, or use the default window.mixpanelLoader. // See _TrackingTop.cshtml for the code that loads mixpanel. if (typeof props.onMixpanelLoad === 'function') { this.onMixpanelLoad = props.onMixpanelLoad } else if (window.mixpanelLoader && typeof window.mixpanelLoader.onLoad === 'function') { this.onMixpanelLoad = window.mixpanelLoader.onLoad } else { this.onMixpanelLoad = function () { } } // How long to wait on mixpanel before giving up and showing the default variant this.timeout = 2000 // Gets the variant of the page for the current user. If they've already been assigned to a variant, // give them that one. Otherwise, assign them to a random variant. Parameter specifiedVariant allows // the caller to ask for a particular variant, without setting mixpanel super props. this.getVariant = function (specifiedVariant) { var variantName = specifiedVariant ? specifiedVariant : mixpanel.get_property(this.name) var variant = this.variants.find(function (v) { return v.name === variantName }) if (!variant && !specifiedVariant) { // The user has not yet beeen assigned to a variant and one has not been specified by caller variant = this.getRandomVariant() props = {} props[this.name] = variant.name mixpanel.register_once(props) } return variant } // Picks a variant uniformly at random this.getRandomVariant = function () { return this.variants[Math.floor(Math.random() * this.variants.length)] } this.getVariantSelector = function (variant) { return "." + this.name + "-" + variant.name } // Renders the variant to the page this.showVariant = function (variant, callback) { // Hide all of the variants. this.hideVariants() // Show the dom elements associated with this particular variant $(this.getVariantSelector(variant)).show() // Variant definition can supply a callback if (typeof variant.initialize === 'function') { variant.initialize() } // Caller can supply a callback, either a function or an object with keys named // according to the variants if (typeof callback === 'function') { callback(variant) } else if (typeof callback === 'object' && typeof callback[variant.name] === 'function') { callback[variant.name](variant) } this.currentVariant = variant } // Hides any variants that are currently showing in the page this.hideVariants = function () { var tmpThis = this this.variants.forEach(function (variant) { $(tmpThis.getVariantSelector(variant)).hide() }) } // Runs with a particular variant, but doesn't actually bucket the user (for debugging) this.runVariant = function (variantName, callback) { var variant = this.getVariant(variantName) this.initialized = true this.showVariant(variant, callback) } this.showSpinner = function () { $('.ab-loading.' + this.name).show() } this.hideSpinner = function () { $('.ab-loading.' + this.name).hide() } // Runs the experiment this.run = function (callback) { var tmpThis = this tmpThis.showSpinner() // The run method has already been called if (this.currentVariant && this.initialized) { callback(this.currentVariant) return } // We need to make sure mixpanel is loaded to check whether the user has already been assigned // to a variant. this.onMixpanelLoad(function () { if (tmpThis.initialized) { callback(tmpThis.currentVariant) return } tmpThis.initialized = true var variant = tmpThis.getVariant() tmpThis.showVariant(variant, callback) tmpThis.hideSpinner() }) // Just in case mixpanel doesn't load, we show them the default variant setTimeout(function () { if (tmpThis.initialized) { callback(tmpThis.currentVariant) return } tmpThis.initialized = true tmpThis.showVariant(tmpThis.defaultVariant, callback) tmpThis.hideSpinner() }, this.timeout) return this } } // Set up a global abTests object that's used to add/run tests in particular pages var tests = [] var abTests = {} var menuInitialized = false var isDebug = false abTests.addTest = function (props) { tests.push(new ABTest(props)) } abTests.getTest = function (name) { var test = tests.find(function (t) { return t.name === name }) if (test) { return test } else { console.error('Could not find AB test: ' + String(name)) return { run: function () { } } } } // Functions below allow internal users to select ab test variants. Don't store this state // in mixpanel because mixpanel is not turned on for internal users. var localStorageAvailable = function () { var test = 'test' try { localStorage.setItem(test, test) localStorage.removeItem(test) return true } catch (e) { return false } } abTests.setSelectedVariant = function (testName, variantName) { if (!localStorageAvailable()) return localStorage.setItem(testName, variantName) } abTests.loadSelectedVariant = function (testName) { if (!localStorageAvailable()) return var variantName = localStorage.getItem(testName) if (variantName) { return variantName } else { return } } var highlightMenuVariant = function (testName, callback) { return function (variant) { callback(variant) if (isDebug) { $('.ab-menu-root .ab-test-name').filter(function () { return $(this).data('name') === testName }) .find('.ab-test-variant-name').each(function () { var thisVariant = $(this).data() || {} if (thisVariant.name === variant.name) { $(this).addClass('ab-menu-highlight') } }) } } } abTests.runTest = function (name, callback) { // Check to see if there's a selected variant to override default ab behavior var selectedVariant = abTests.loadSelectedVariant(name) // Update the menu to display ab info if (!menuInitialized) abTests.initializeMenu() abTests.addToMenu(name) var newCallback = highlightMenuVariant(name, callback) if (selectedVariant) { return abTests.runTestVariant(name, selectedVariant, newCallback) } else { return abTests.getTest(name).run(newCallback) } } abTests.runTestVariant = function (name, variantName, callback) { var newCallback = highlightMenuVariant(name, callback) return abTests.getTest(name).runVariant(variantName, newCallback) } abTests.initializeMenu = function () { // Only initialize menu if in debug mode if (!isDebug) return var $menu = $('#ab-menu') if ($menu.length != 1) return $menu.show() var $root = $('.ab-menu-root') $root.hide() $('#ab-menu').find('.title').on('click', function () { $root.toggle() }) menuInitialized = true } abTests.addToMenu = function (testName) { if (!menuInitialized || !isDebug) return var test = abTests.getTest(testName) if (!test) return var $root = $('.ab-menu-root') var $testRoot = $('<li class="ab-test-name">' + testName + '</li>') $testRoot.data({name: testName}) $testRoot.appendTo($root) test.variants.forEach(function (variant) { var $variant = $('<li class="ab-test-variant-name"><a class="link" href="#">' + variant.name + '</a></li>') $variant.data(variant) $variant.appendTo($testRoot) $variant.find('a').on('click', function(e) { e.preventDefault() abTests.setSelectedVariant(testName, variant.name) location.reload() }) }) } window.abTests = abTests /* leaving this here as an example abTests.addTest({ name: 'abSpecClickableHints', variants: [ { name: 'Clickable', useHintLinks: true }, { name: 'Not Clickable', useHintLinks: false } ] }) */ })() </script> <script nonce="udm6U3KxMohxJZtmbGdaLw=="> var INTERCOM_APP_ID = "vwrsb6v2"; window.intercomSettings = { app_id: INTERCOM_APP_ID }; window.intercomSettings.hide_default_launcher = true; window.intercomSettings.custom_launcher_selector = '#intercom_overlay_button'; (function () { var w = window; var ic = w.Intercom; if (typeof ic === "function") { ic('reattach_activator'); ic('update', intercomSettings); } else { var d = document; var i = function () { i.c(arguments) }; i.q = []; i.c = function (args) { i.q.push(args) }; w.Intercom = i; function l() { var s = d.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = 'https://web.archive.org/web/20210812205235/https://widget.intercom.io/widget/' + INTERCOM_APP_ID; var x = d.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x); } if (w.attachEvent) { w.attachEvent('onload', l); } else { w.addEventListener('load', l, false); } } })() function appendIntercomDiv() { // jQuery was not loading var div = document.createElement('div'); div.id = "intercom_overlay_button" div.innerHTML = '<i class="material">chat_bubble_outline</i>'; document.body.appendChild(div); } if (document.readyState === 'loading') { // Loading hasn't finished yet document.addEventListener('DOMContentLoaded', appendIntercomDiv); } else { // DOMContentLoaded has already fired appendIntercomDiv(); } </script> <link rel="stylesheet" type="text/css" href="/web/20210812205235cs_/https://www.appsheet.com/Content/css/cookieconsent2-3.1.0.min.css"/> </head> <body id="home" class="gsuite-root"> <div class="bodyWrapper"> <img src="/web/20210812205235im_/https://www.appsheet.com/Content/img/logo/material/logomark.png" alt="" class="hidden" style="display: none;"/> <script nonce="udm6U3KxMohxJZtmbGdaLw=="> var verifiedAjaxPost = function (options) { if (!options.headers) { options.headers = {} } options.headers.RequestVerificationToken = 'UuqxZaqHs-lknRZ08ZAO5xbQYhtT_2GeQafovtOFQ2R23MI0U7z0jTIWfE5Nt0X72I9pCJECpY7_wUUlBJr3CYZAq3Jk68KGz0KXXnwRkJKfQvJnjhUNyU0ajBp2Rs6ksKFroF23s2wAYFdDIIscdw2:xLa6XTwAyE_lIW9gijOV4rs77ZJW9uz8QV_IyIgm622RAnzeUBf9OkEXvhxrxW_qL1SDsFgKoqxBotkwEgWbf70R7XC-hVpQzZxFEP1Ns1MY066Z_Wjsnm1osuX_Um83SHBx5y4tmpws2b51muos6w2' options.method = 'POST' return $.ajax(options) } window.verifiedAjaxPost = verifiedAjaxPost var reloadPage = function (nonce) { // if there is already a nonce=, remove it var currentSearch = window.location.search var currentSearchSplit = currentSearch.split("&nonce=") if (currentSearchSplit.length > 1) { currentSearchSplit[1] = "" currentSearch = currentSearchSplit.join("") } window.location.search = currentSearch + "&nonce=" + (nonce ? nonce : Math.random()) } // GLOBALS window.DEBUG_MODE = false window.ALLOW_DEBUG_LOGGING = false window.USE_UPDATED_SKUS = false; window.getUserId = function () { return '-1' } </script> <div id="cloningClickEater"> <div id="waitingClone"> <div class="loader">Loading...</div> <p>We're setting up your new app...</p> </div> <div id="errorClick"> <div id="errorModal" class="modal fade"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close AlwaysEditable" data-dismiss="modal"><i class="material">cancel</i></button> <h5 class="modal-title">Error Cloning App</h5> </div> <div id="modalErrorText" class="modal-body"></div> <div class="modal-footer"> <button id="dismissModal" type="button" class="btn btn-default AlwaysEditable" data-dismiss="modal">Close</button> </div> </div> </div> </div> </div> </div> <header class="topNav"> <div class="primaryNav"> <div class="logo"> <a href="/web/20210812205235/https://www.appsheet.com/"> <img class="material-logo" src="https://web.archive.org/web/20210812205235im_/https://www.appsheet.com/content/img/material/logo.svg"/> <span class="logo-text"> AppSheet </span> <span class="subscriptionType"></span> </a> </div> <nav> <div class="navicon"> <i class="material clickable">arrow_drop_down</i> </div> <ul class="non-mobile"> <li class="createanapp "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/how-to-create-an-app" data-label="createanapp" rel="" target=""> <span> How to create an app </span> </a> </li> <li class="howitworks "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/application-platform" data-label="howitworks" rel="" target=""> <span> Platform </span> </a> </li> <li class="pricing "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/pricing" data-label="pricing" rel="" target=""> <span> Pricing </span> </a> </li> <li class="apps "> <a href="/web/20210812205235/https://www.appsheet.com/templates" data-label="apps" rel="" target=""> <span> Sample apps </span> </a> </li> <li class="enterprise "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/appsheet-enterprise" data-label="enterprise" rel="" target=""> <span> Enterprise </span> </a> </li> <li class="solutions "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/get-it-done" data-label="solutions" rel="" target=""> <span> Solutions </span> </a> </li> <li class="blog "> <a href="https://web.archive.org/web/20210812205235/https://blog.appsheet.com/" data-label="blog" rel="" target=""> <span> Blog </span> </a> </li> <li class="login "> <a href="/web/20210812205235/https://www.appsheet.com/Account/Login" data-label="login" rel="" target=""> <span> Login </span> </a> </li> <li class="signup "> <a href="/web/20210812205235/https://www.appsheet.com/Home/Start" data-label="signup" rel="" target=""> <span> Start for free </span> </a> </li> </ul> <ul class="mobile"> <li class="createanapp "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/how-to-create-an-app" data-label="createanapp" rel="" target=""> <span> How to create an app </span> </a> </li> <li class="howitworks "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/application-platform" data-label="howitworks" rel="" target=""> <span> Platform </span> </a> </li> <li class="pricing "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/pricing" data-label="pricing" rel="" target=""> <span> Pricing </span> </a> </li> <li class="apps "> <a href="/web/20210812205235/https://www.appsheet.com/templates" data-label="apps" rel="" target=""> <span> Sample apps </span> </a> </li> <li class="enterprise "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/appsheet-enterprise" data-label="enterprise" rel="" target=""> <span> Enterprise </span> </a> </li> <li class="solutions "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/get-it-done" data-label="solutions" rel="" target=""> <span> Solutions </span> </a> </li> <li class="blog "> <a href="https://web.archive.org/web/20210812205235/https://blog.appsheet.com/" data-label="blog" rel="" target=""> <span> Blog </span> </a> </li> <li class="login "> <a href="/web/20210812205235/https://www.appsheet.com/Account/Login" data-label="login" rel="" target=""> <span> Login </span> </a> </li> <li class="signup "> <a href="/web/20210812205235/https://www.appsheet.com/Home/Start" data-label="signup" rel="" target=""> <span> Start for free </span> </a> </li> </ul> </nav> </div> </header> <main> <div class="pageHeader"> <h2> </h2> <div class="more"> </div> </div> <div class="frame"> <div class="section-cards no-wrap"> <section class="header"> <h1 class="display2">The intelligent no‑code platform</h1> <h2>Reclaim your time and talent with no-code apps and automation</h2> <a class="marketing-cta" href="/web/20210812205235/https://www.appsheet.com/Home/Start"> <button class="start-for-free-button icon-button-filled">Start for free</button> </a> </section> <section class="screenshot"> <img class="" src="/web/20210812205235im_/https://www.appsheet.com/Content/img/heroimg/desktop_screen.png" alt="AppSheet app"/> </section> </div> <div class="screenshots carousel"> <img class="screenshot active" src="/web/20210812205235im_/https://www.appsheet.com/Content/web/img/screenshots/home_phone_carousel_1.png" alt="AppSheet app"/> <img class="screenshot hidden" src="/web/20210812205235im_/https://www.appsheet.com/Content/web/img/screenshots/home_phone_carousel_2.png" alt="AppSheet app"/> <img class="screenshot hidden" src="/web/20210812205235im_/https://www.appsheet.com/Content/web/img/screenshots/home_phone_carousel_3.png" alt="AppSheet app"/> <img class="screenshot hidden" src="/web/20210812205235im_/https://www.appsheet.com/Content/web/img/screenshots/home_phone_carousel_4.png" alt="AppSheet app"/> <img class="screenshot hidden" src="/web/20210812205235im_/https://www.appsheet.com/Content/web/img/screenshots/home_phone_carousel_5.png" alt="AppSheet app"/> <img class="screenshot hidden" src="/web/20210812205235im_/https://www.appsheet.com/Content/web/img/screenshots/home_phone_carousel_6.png" alt="AppSheet app"/> <img class="screenshot hidden" src="/web/20210812205235im_/https://www.appsheet.com/Content/web/img/screenshots/home_phone_carousel_7.png" alt="AppSheet app"/> </div> <section class="marketing-cards"> <div class="card"> <div class="card-icon green"> <i class="material strikethrough">code</i> </div> <h5>No-Code</h5> <p class="body1">Anyone on your team can make apps and automate processes</p> </div> <div class="card"> <div class="card-icon yellow"> <i class="material">schedule</i> </div> <h5>Agile</h5> <p class="body1">Create and deploy multi-platform apps in real-time</p> </div> <div class="card"> <div class="card-icon red"> <i class="material">offline_bolt</i> </div> <h5>Powerful</h5> <p class="body1">Deliver a rich user experience with a robust feature set</p> </div> </section> <section class="section-cards"> <section class="announcement"> <div class="section-card-content"> <h2> COVID-19 Support </h2> <p> AppSheet is committed to helping our community develop new ways of supporting remote teams, healthcare workers, and one another. </p> </div> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/appsheet-covid-19-support-guide-free-deployment"> Learn more </a> </section> <section class="forrester"> <div class="section-card-content"> <h2> Industry-leading platform </h2> <p> A Forrester Wave leader among low-code development platforms for business users. </p> </div> <a href="https://web.archive.org/web/20210812205235/https://pages.appsheet.com/2020-forrester-wave-report-ebook.html"> View report </a> </section> </section> <section class="logos-2"> <img src="/web/20210812205235im_/https://www.appsheet.com/Content/web/img/home/logos/Solvay.png" alt="Solvay"/> <img src="/web/20210812205235im_/https://www.appsheet.com/Content/web/img/home/logos/Riwal.png" alt="Riwal"/> <img src="/web/20210812205235im_/https://www.appsheet.com/Content/web/img/home/logos/Clearlink.png" alt="Clearlink"/> <img src="/web/20210812205235im_/https://www.appsheet.com/Content/web/img/home/logos/Veolia.png" alt="Veolia"/> <img src="/web/20210812205235im_/https://www.appsheet.com/Content/web/img/home/logos/GE.png" alt="GE"/> <img src="/web/20210812205235im_/https://www.appsheet.com/Content/web/img/home/logos/KLB Construction.png" alt="KLB Construction"/> </section> <section class="apps-created"> <h3>Make an app.</h3> <div class="display1"> <span id="app-count">3793629</span> <span class="overline">Apps Created</span> </div> <h3>Share it with the world.</h3> </section> <section class="testimonial-section"> <img class="quote" src="/web/20210812205235im_/https://www.appsheet.com/Content/web/img/material/home/quote.svg"/> <div class="testimonials"> <div class="testimonial active"> <blockquote> AppSheet has allowed us to be flexible with our app creation rather than being tied to a specification at the outset. We've been able to change, adapt and react to user feedback at the same time as adding new features to improve the user experience. </blockquote> <p class="attribution"> <span class="author">Andy Foddy,</span> <span class="org">TARMAC</span> </p> </div> <div class="testimonial hidden"> <blockquote> What AppSheet did was allow me to really quickly create a tool to collect data. We're really excited to be able to collect this information on the assembly line. Anyone in final assembly, anyone in design has constantly up-to-date information down to the part level. </blockquote> <p class="attribution"> <span class="author">Ben Atkinson,</span> <span class="org">Toyota</span> </p> </div> <div class="testimonial hidden"> <blockquote> Using AppSheet, we were able to design and launch a full end-to-end app in just two days. Altogether, it's a fantastic platform - and perfect for any civic organization that is looking to improve information management and resource distribution. </blockquote> <p class="attribution"> <span class="author">Michael Terrelonge,</span> <span class="org">Rotary International</span> </p> </div> </div> </section> </div> <div class="modal" id="deleteAccountModal"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button class="AlwaysEditable cancel" data-dismiss="modal">Cancel</button> <h5 class="modal-title"> Delete my account </h5> </div> <form> <div class="modal-body"> <p>We're sorry to see you go! Why are you leaving?</p> <p> <fieldset> <div> <input name="deleteAccountReason" type="radio" value="too hard" id="too-hard" style="width:auto;margin-right:10px"/><label for="too-hard" style="display:inline">It's too hard to figure out</label> </div> <div> <input name="deleteAccountReason" type="radio" value="unmet needs" id="unmet-needs" style="width:auto;margin-right:10px"/><label for="unmet-needs" style="display:inline">It doesn't do what I need it to do</label> </div> <div> <input name="deleteAccountReason" type="radio" value="just browsing" id="just-browsing" style="width:auto;margin-right:10px"/><label for="just-browsing" style="display:inline">I was just browsing</label> </div> <div> <input name="deleteAccountReason" type="radio" value="other" id="other" style="width:auto;margin-right:10px"/><label for="other" style="display:inline">Other</label> </div> </fieldset> </p> <p> <label for="delete-account-comment">Please tell us what we should improve<textarea rows="4" name="deleteAccountComment" id="delete-account-comment"></textarea></label> </p> <p> <a href="https://web.archive.org/web/20210812205235/https://help.appsheet.com/en/articles/962254-resetting-appsheet" class="link clear-devices-help-link"> Deletion of this account will not delete the apps or app data already downloaded to app users' devices. </a> </p> </div> <div class="modal-footer" style="overflow:auto"> <button type="submit">Delete my account</button> </div> </form> </div> </div> </div> </main> <footer class="bottomNav"> <nav> <ul> <li class="company"> <div class="subheader1"><a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/about">Company</a></div> <ul> <li class="about "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/about">About</a> </li> <li class="blog "> <a href="https://web.archive.org/web/20210812205235/http://blog.appsheet.com/">Blog</a> </li> <li class="careers "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/careers">Careers</a> </li> <li class="contactus "> <a href="/web/20210812205235/https://www.appsheet.com/Support/Contact">Contact us</a> </li> </ul> </li> <li class="howitworks"> <div class="subheader1"><a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/application-platform">Platform</a></div> <ul> <li class="box "> <a href="/web/20210812205235/https://www.appsheet.com/HowItWorks/Architecture">Architecture</a> </li> <li class="datasource "> <a href="/web/20210812205235/https://www.appsheet.com/HowItWorks/DataSources">Data Sources</a> </li> <li class="enterprise "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/appsheet-enterprise">Enterprise</a> </li> <li class="trustCenter "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/trust-center">Trust Center</a> </li> </ul> </li> <li class="pricing"> <div class="subheader1"><a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/pricing">Pricing</a></div> <ul> <li class="terms "> <a href="/web/20210812205235/https://www.appsheet.com/Home/Terms">Terms of service</a> </li> <li class="privacy "> <a href="https://web.archive.org/web/20210812205235/https://policies.google.com/privacy">Privacy policy</a> </li> <li class="sales "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/contact">Contact sales</a> </li> </ul> </li> <li class="solutions"> <div class="subheader1"><a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/get-it-done">Solutions</a></div> <ul> <li class="apps "> <a href="/web/20210812205235/https://www.appsheet.com/templates">Sample apps</a> </li> <li class="resources "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/get-it-done#section3-outer-wrap">Resources</a> </li> <li class="industries "> <a href="/web/20210812205235/https://www.appsheet.com/Solutions#industries">Industries</a> </li> <li class="customers "> <a href="https://web.archive.org/web/20210812205235/https://blog.appsheet.com/topic/customers">Customers</a> </li> </ul> </li> <li class="partners"> <div class="subheader1"><a href="/web/20210812205235/https://www.appsheet.com/Partners">Partners</a></div> <ul> <li class="findapartner "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/partners/get-partner-help">Find a partner</a> </li> <li class="becomeapartner "> <a href="https://web.archive.org/web/20210812205235/https://solutions.appsheet.com/partners/become-an-appsheet-partner">Become a partner</a> </li> </ul> </li> <li class="support"> <div class="subheader1"><a href="/web/20210812205235/https://www.appsheet.com/Support">Support</a></div> <ul> <li class="community "> <a href="https://web.archive.org/web/20210812205235/https://community.appsheet.com/">Community</a> </li> <li class="documentation "> <a href="https://web.archive.org/web/20210812205235/https://help.appsheet.com/">Documentation</a> </li> <li class="contactus "> <a href="/web/20210812205235/https://www.appsheet.com/Support/Contact">Contact Us</a> </li> </ul> </li> <li class="account"> <div class="subheader1"><a href="/web/20210812205235/https://www.appsheet.com/Template/Apps">Account</a></div> <ul> <li class="login "> <a href="/web/20210812205235/https://www.appsheet.com/Account/Login">Login</a> </li> <li class="signup "> <a href="/web/20210812205235/https://www.appsheet.com/Home/Start">Start for free</a> </li> </ul> </li> </ul> <div class="bottom-meta"> <div class="socialMedia" itemscope itemtype="http://schema.org/Organization"> <link itemprop="url" href="https://www.appsheet.com"> <a href="https://web.archive.org/web/20210812205235/https://www.youtube.com/channel/UC7xYEO2O_VZWyvctU0LQp8g" itemprop="sameAs"> <i class="material">post_youtube</i> </a> <a href="https://web.archive.org/web/20210812205235/https://www.linkedin.com/company/appsheet" itemprop="sameAs"> <i class="material">post_linkedin</i> </a> <a href="https://web.archive.org/web/20210812205235/https://twitter.com/appsheet" itemprop="sameAs"> <i class="material">post_twitter</i> </a> <a href="https://web.archive.org/web/20210812205235/https://www.facebook.com/appsheet" itemprop="sameAs"> <i class="material">post_facebook</i> </a> </div> </div> </nav> </footer> <script nonce="udm6U3KxMohxJZtmbGdaLw==" src="/web/20210812205235js_/https://www.appsheet.com/Scripts/jquery-3.5.1.min.js"></script> <script nonce="udm6U3KxMohxJZtmbGdaLw==" src="/web/20210812205235js_/https://www.appsheet.com/Scripts/jquery-migrate-3.3.2.min.js"></script> <script nonce="udm6U3KxMohxJZtmbGdaLw==" src="/web/20210812205235js_/https://www.appsheet.com/bundles/valjquery"></script> <script nonce="udm6U3KxMohxJZtmbGdaLw==" src="/web/20210812205235js_/https://www.appsheet.com/bundles/unobtrusive?v=lWgf8_nB9MzU3N1ztusS2nnyZp9GZERS2J1NvX37gZo1"></script> <script nonce="udm6U3KxMohxJZtmbGdaLw==" src="/web/20210812205235js_/https://www.appsheet.com/Content/scripts/web/utilities.js?update='20210810'.1"></script> <script nonce="udm6U3KxMohxJZtmbGdaLw==" src="/web/20210812205235js_/https://www.appsheet.com/Content/scripts/web/accountStartup.js"> </script> <script nonce="udm6U3KxMohxJZtmbGdaLw==" type="text/javascript"> $(function () { var shouldCheck = false; if (shouldCheck) { var oneHour = 60 * 60 * 1000; initCheckAccountStatus(oneHour); } }); </script> <script nonce="udm6U3KxMohxJZtmbGdaLw=="> // === COUNTER === var appCount = 3793629 var appRate = 86.4 var updateAppCount = function () { appCount ++ $("#app-count").text(appCount.toLocaleString()) var randomVariation = (appRate * 2 * Math.random()) - appRate setTimeout(updateAppCount, (appRate + randomVariation) * 1000) } // === CAROUSEL === var createCarousel = function (el, changeRate, fadeRate, fixedHeight) { var items = $(el).children() var numItems = items.length var currentItem = 0 var updateCarousel = function () { var prevItem = items.eq(currentItem) if (prevItem) { prevItem.removeClass("active").fadeOut(fadeRate) } currentItem ++ if (currentItem >= numItems) { currentItem = 0 } var nextItem = items.eq(currentItem) if (nextItem) { nextItem.addClass("active").fadeIn(fadeRate) } // if the carousel items are all the same height, avoid the resize animation // since it leads to weirdness when resizing the screen if (!fixedHeight) { var nextHeight = nextItem.height() $(el).animate({ height: nextHeight }, fadeRate) } } var carouselLoop = setInterval(updateCarousel, changeRate) } // === LOGOS === var randomSort = function (list) { return list.sort(function () { return Math.round(Math.random()) - 0.5 }) } var randomizeLogos = function () { var logos = $(".logos img") logos = randomSort(logos) $(".logos").append(logos) } // === INIT === $(function () { updateAppCount() createCarousel(".screenshots", 7000, 1800, true) createCarousel(".testimonials", 10000, 1800) randomizeLogos() }) </script> <noscript> <iframe src="https://web.archive.org/web/20210812205235if_/https://www.googletagmanager.com/ns.html?id=GTM-N6QM4V3" height="0" width="0" style="display:none;visibility:hidden"></iframe> </noscript> <script nonce="udm6U3KxMohxJZtmbGdaLw=="> if (window.Intercom) { var intercomOptions = null || {}; intercomOptions.app_id = INTERCOM_APP_ID; intercomOptions.hide_default_launcher = true; intercomOptions.custom_launcher_selector = '#intercom_overlay_button'; var overlay = $('<div id="intercom_overlay_button"><i class="material">chat_bubble_outline</i></div>'); overlay.appendTo(document.body); Intercom('boot', intercomOptions) if ('false' == 'true') { setTimeout(function() { Intercom('shutdown') }, 100) } } </script> <script id="CookieConsent" nonce="udm6U3KxMohxJZtmbGdaLw==" src="/web/20210812205235js_/https://www.appsheet.com/Content/scripts/_shared/external/cookieconsent2-3.1.0.min.js" async defer></script> <script nonce="udm6U3KxMohxJZtmbGdaLw=="> window.showCookieConsent = function () { window.cookieconsent.initialise({ "palette": { "popup": { "background": "#ffffff", "text": "#3C4043" }, "button": { "background": "#1A73E8", "text": "#ffffff" } }, "position": "bottom-left", "content": { "message": "This website uses cookies to ensure you get the best experience with our platform.", "dismiss": "Got it!", "link": "Learn more", "href": "https://web.archive.org/web/20210812205235/https://www.appsheet.com/Home/Privacy" }, "cookie": { "domain": ".appsheet.com", "secure": true, }, }) }; $('#CookieConsent').on('load', showCookieConsent) </script> </div> </body> </html> <!-- FILE ARCHIVED ON 20:52:35 Aug 12, 2021 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 00:58:09 Dec 12, 2024. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). --> <!-- playback timings (ms): captures_list: 0.847 exclusion.robots: 0.054 exclusion.robots.policy: 0.039 esindex: 0.016 cdx.remote: 26.681 LoadShardBlock: 227.699 (3) PetaboxLoader3.datanode: 181.79 (4) PetaboxLoader3.resolve: 199.909 (2) load_resource: 221.619 -->