PageSourceSearch

https://visibledata.co.uk/

html visibledata.co.uk collected 2026-10-07 16:41:42 UTC 16,226 bytes, 391 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en-GB">
3 <head>
4  
4<script>
5   (function () {
6  var proto = XMLHttpRequest.prototype;
7  var open = proto.open, setRequestHeader = proto.setRequestHeader, send = proto.send;
8  var TOKEN_KEY = 'base44_access_token';
9  var storedTokenHeader = function () {
10    try { return 'Bearer ' + localStorage.getItem(TOKEN_KEY); } catch (e) { return null; }
11  };
12  var forgetStoredToken = function () {
13    try { localStorage.removeItem(TOKEN_KEY); localStorage.removeItem('token'); } catch (e) {}
14  };
15
16  proto.open = function (method, url) {
17    this.__b44IsAuthCheck = /\/entities\/User\/me(\?|$)/.test(url);
18    return open.apply(this, arguments);
19  };
20
21  proto.setRequestHeader = function (name, value) {
22    if (this.__b44IsAuthCheck && name.toLowerCase() === 'authorization' && value === storedTokenHeader()) {
23      this.__b44SentToken = value;
24    }
25    return setRequestHeader.call(this, name, value);
26  };
27
28  proto.send = function () {
29    this.addEventListener('loadend', function () {
30      var rejectedTokenStillStored = this.status === 401 && this.__b44SentToken === storedTokenHeader();
31      if (rejectedTokenStillStored) forgetStoredToken();
32    });
33    return send.apply(this, arguments);
34  };
35})();
36  </script>
36
37  <meta charset="utf-8"/>
38  <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
39  <!-- Primary Meta Tags -->
40  <title>
41   VisibleData
42  </title>
43  <meta content="VisibleData | UK Data Visualisation, Dashboard Builder &amp; Analytics Platform" name="title"/>
44  <meta content="VisibleData manages 5 data types including dashboards. Helps you organize, track, and share your work in 1 place for teams and solo users." name="description"/>
45  <meta content="data visualisation, dashboard builder, analytics platform, UK data analytics, business intelligence, data visualization UK, BI tools, real-time analytics, data dashboards, KPI dashboard, reporting tools, data insights, chart builder, interactive dashboards" name="keywords"/>
46  <meta content="VisibleData" name="author"/>
47  <meta content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" name="robots"/>
48  <!-- Open Graph / Facebook -->
49  <meta content="website" property="og:type"/>
50  <meta content="https://visibledata.co.uk" property="og:url"/>
51  <meta content="VisibleData" property="og:title"/>
52  <meta content="VisibleData manages 5 data types including dashboards. Helps you organize, track, and share your work in 1 place for teams and solo users." property="og:description"/>
53  <meta content="VisibleData" property="og:site_name"/>
54  <meta content="en_GB" property="og:locale"/>
55  <!-- Twitter -->
56  <meta content="summary_large_image" property="twitter:card"/>
57  <meta content="https://visibledata.co.uk" property="twitter:url"/>
58  <meta content="VisibleData" property="twitter:title"/>
59  <meta content="VisibleData manages 5 data types including dashboards. Helps you organize, track, and share your work in 1 place for teams and solo users." property="twitter:description"/>
60  <!-- Geo Tags -->
61  <meta content="GB" name="geo.region"/>
62  <meta content="London" name="geo.placename"/>
63  <!-- Structured Data - Organization -->
64  
64<script type="application/ld+json">
65   {
66      "@context": "https://schema.org",
67      "@type": "Organization",
68      "name": "VisibleData",
69      "url": "https://visibledata.co.uk",
70      "description": "UK's leading data visualisation, dashboard builder, and analytics platform.",
71      "address": {
72        "@type": "PostalAddress",
73        "addressCountry": "GB",
74        "addressLocality": "London"
75      },
76      "contactPoint": {
77        "@type": "ContactPoint",
78        "email": "[email protected]",
79        "contactType": "customer service"
80      }
81    }
82  </script>
82
83  <!-- Structured Data - WebSite -->
84  
84<script type="application/ld+json">
85   {
86      "@context": "https://schema.org",
87      "@type": "WebSite",
88      "name": "VisibleData",
89      "url": "https://visibledata.co.uk",
90      "description": "Data Visualisation, Dashboard Builder & Analytics Platform"
91    }
92  </script>
92
93  <!-- Structured Data - SoftwareApplication -->
94  
94<script type="application/ld+json">
95   {
96      "@context": "https://schema.org",
97      "@type": "SoftwareApplication",
98      "name": "VisibleData",
99      "operatingSystem": "Web",
100      "applicationCategory": "BusinessApplication",
101      "description": "Professional data visualisation and dashboard building platform for UK businesses.",
102      "offers": {
103        "@type": "Offer",
104        "price": "0",
105        "priceCurrency": "GBP",
106        "description": "Free tier available"
107      },
108      "aggregateRating": {
109        "@type": "AggregateRating",
110        "ratingValue": "4.8",
111        "ratingCount": "1247",
112        "bestRating": "5"
113      }
114    }
115  </script>
115
116  <!-- Structured Data - FAQ -->
117  
117<script type="application/ld+json">
118   {
119      "@context": "https://schema.org",
120      "@type": "FAQPage",
121      "mainEntity": [
122        {
123          "@type": "Question",
124          "name": "What is VisibleData?",
125          "acceptedAnswer": {
126            "@type": "Answer",
127            "text": "VisibleData is the UK's leading data visualisation and analytics platform. It provides dashboard building, real-time analytics, and 30+ chart types with 200+ data connectors."
128          }
129        },
130        {
131          "@type": "Question",
132          "name": "Is there a free plan?",
133          "acceptedAnswer": {
134            "@type": "Answer",
135            "text": "Yes! VisibleData offers a generous free tier with 3 dashboards, 5 chart types, and 1,000 data rows. No credit card required."
136          }
137        },
138        {
139          "@type": "Question",
140          "name": "Where is data stored?",
141          "acceptedAnswer": {
142            "@type": "Answer",
143            "text": "All data is stored in UK-based data centres (London region) with AES-256 encryption. VisibleData is fully GDPR compliant."
144          }
145        }
146      ]
147    }
148  </script>
148
149  
149<script crossorigin="" src="/assets/index-DPDaGeFN.js" type="module">
150  </script>
150
151  <link crossorigin="" href="/assets/index-Bs1s-Xif.css" rel="stylesheet"/>
152  
152<script type="module">
153   if (window.self === window.top) {
154  let lastPath = "";
155  function getPageNameFromPath(path) {
156    const segments = path.split("/").filter(Boolean);
157    return segments[0] || null;
158  }
159  function trackPageView() {
160    const path = window.location.pathname;
161    if (path === lastPath) return;
162    lastPath = path;
163    const pageName = getPageNameFromPath(path) || "home";
164    const appId = "6a2a9cfe9e9e7e305f25313d";
165    if (!appId) return;
166    fetch(`/api/app-logs/${appId}/log-user-in-app/${pageName}`, {
167      method: "POST",
168    }).catch(() => {});
169  }
170  const originalPushState = history.pushState.bind(history);
171  history.pushState = function (...args) {
172    originalPushState(...args);
173    trackPageView();
174  };
175  const originalReplaceState = history.replaceState.bind(history);
176  history.replaceState = function (...args) {
177    originalReplaceState(...args);
178    trackPageView();
179  };
180  window.addEventListener("popstate", trackPageView);
181  trackPageView();
182}
183  </script>
183
184  <meta content="https://media.base44.com/images/public/6a2a9cfe9e9e7e305f25313d/f5f2e9093_logo.png/v1/fill/w_1200,h_630/f5f2e9093_logo.png" property="og:image"/>
185  <meta content="https://media.base44.com/images/public/6a2a9cfe9e9e7e305f25313d/f5f2e9093_logo.png/v1/fill/w_1200,h_630/f5f2e9093_logo.png" name="twitter:image"/>
186  
186<script>
187   (function () {
188  var titles = {"/": "VisibleData", "/home": "Home | VisibleData", "/features": "Features | VisibleData", "/dashboards": "Dashboards | VisibleData", "/analytics": "Analytics | VisibleData", "/comparisons": "Comparisons | VisibleData", "/insights": "Insights | VisibleData", "/pricing": "Pricing | VisibleData", "/contact": "Contact | VisibleData", "/about": "About | VisibleData", "/privacy": "Privacy | VisibleData", "/terms": "Terms | VisibleData", "/builder": "Dashboard Builder | VisibleData", "/templates": "Templates | VisibleData", "/compare": "Data Compare | VisibleData", "/alerts": "Alerts | VisibleData", "/login": "Login | VisibleData", "/register": "Register | VisibleData", "/forgot-password": "Forgot Password | VisibleData", "/reset-password": "Reset Password | VisibleData", "/domaingateway": "VisibleData", "/domain-gateway": "VisibleData"};
189  // PascalCase boundaries -> "-", mirroring _PASCAL_BOUNDARY_RE without lookbehind
190  // (old Safari fails to PARSE a lookbehind, taking the whole script down).
191  var dashed = function (s) {
192    return s.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/([A-Z])([A-Z][a-z])/g, "$1-$2");
193  };
194  var decode = function (s) {
195    // A %2F inside ONE segment must not become a structural separator: /blog/foo%2Fbar is a
196    // dynamic slug, and letting it split would match a static /blog/foo/bar and write ITS title.
197    try { var d = decodeURIComponent(s); return d.indexOf("/") < 0 ? d : s; } catch (e) { return s; }
198  };
199  var segments = function (path) { return path.split("/").filter(Boolean).map(decode); };
200  var norm = function (path) {
201    var parts = segments(path).map(function (s) { return dashed(s).toLowerCase(); });
202    return parts.length ? "/" + parts.join("/") : "/";
203  };
204  var lastPath = location.pathname, written = document.title, on = true;
205  var sync = function () {
206    // Path only: a hash/query change is the same page, and the SDK strips its own auth
207    // params with replaceState -- neither must clobber a server-rendered title in place.
208    if (!on || location.pathname === lastPath) return;
209    lastPath = location.pathname;
210    if (document.title !== written) { on = false; return; }
211    // Write ONLY a title the map proves. An unmapped path is a dynamic route (/blog/:slug) the
212    // map cannot carry, and writing a placeholder there is destructive, not merely vague: the
213    // prerender worker runs no setUserAgent, so its capture browser reads as human and executes
214    // this script, and coordinator.js's settle wait explicitly tolerates a full navigation --
215    // a redirect landing on an unmapped path would bake the placeholder into the stored
216    // snapshot. Leaving the title alone degrades to today's behavior instead.
217    // Exact lookup only. A dash-stripped retry here would let a genuinely different /set-up
218    // claim /setup: the map carries a dash-free key only where a PascalCase boundary put the
219    // dashes there, and the client cannot tell the two apart. The map emits every reachable
220    // shape per segment instead (_client_url_variants).
221    var title = titles[norm(location.pathname)];
222    if (title === undefined) return;
223    document.title = title;
224    // Re-read: the setter stores verbatim but the getter strips and collapses whitespace, so
225    // keeping the assigned string would make the next sync() read our own write as the app's.
226    written = document.title;
227  };
228  var wrap = function (fn) {
229    // The history entry is already pushed by the time sync() runs, so a throw here would
230    // surface inside the host app's router and break navigation. This is injected into apps
231    // we cannot test, so it swallows rather than trusting the trace.
232    return function () {
233      var r = fn.apply(this, arguments);
234      try { sync(); } catch (e) {}
235      return r;
236    };
237  };
238  history.pushState = wrap(history.pushState);
239  history.replaceState = wrap(history.replaceState);
240  window.addEventListener("popstate", sync);
241})();
242  </script>
242
243  <meta content="yes" name="mobile-web-app-capable"/>
244  <meta content="black" name="apple-mobile-web-app-status-bar-style"/>
245  <meta content="VisibleData" name="apple-mobile-web-app-title"/>
246  <link href="https://visibledata.co.uk" rel="canonical"/>
247  
247<script data-seo-source="builder" type="application/ld+json">
248   {"name": "VisibleData", "@context": "https://schema.org", "@type": "WebSite", "url": "https://visibledata.co.uk"}
249  </script>
249
250  
250<script data-seo-source="builder" type="application/ld+json">
251   {"name": "VisibleData", "logo": "https://media.base44.com/images/public/6a2a9cfe9e9e7e305f25313d/f5f2e9093_logo.png", "@context": "https://schema.org", "@type": "Organization", "url": "https://visibledata.co.uk"}
252  </script>
252
253 </head>
254 <body>
255  <div id="root">
256   <div data-seo-source="builder" id="seo-snapshot" style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;">
257    <main>
258     <header>
259      <h1>
260       VisibleData
261      </h1>
262      <p>
263       VisibleData manages 5 data types including dashboards. Helps you organize, track, and share your work in 1 place for teams and solo users.
264      </p>
265     </header>
266     <nav aria-label="Pages">
267      <h2>
268       Pages
269      </h2>
270      <ul>
271       <li>
272        <a href="/home">
273         Home
274        </a>
275        — Home on VisibleData. VisibleData manages 5 data types including dashboards.
276       </li>
277       <li>
278        <a href="/features">
279         Features
280        </a>
281        — Features on VisibleData. VisibleData manages 5 data types including dashboards.
282       </li>
283       <li>
284        <a href="/dashboards">
285         Dashboards
286        </a>
287        — Dashboards on VisibleData. VisibleData manages 5 data types including dashboards.
288       </li>
289       <li>
290        <a href="/analytics">
291         Analytics
292        </a>
293        — Analytics on VisibleData. VisibleData manages 5 data types including dashboards.
294       </li>
295       <li>
296        <a href="/comparisons">
297         Comparisons
298        </a>
299        — Comparisons on VisibleData. VisibleData manages 5 data types including dashboards.
300       </li>
301       <li>
302        <a href="/insights">
303         Insights
304        </a>
305        — Insights on VisibleData. VisibleData manages 5 data types including dashboards.
306       </li>
307       <li>
308        <a href="/pricing">
309         Pricing
310        </a>
311        — Pricing on VisibleData. VisibleData manages 5 data types including dashboards.
312       </li>
313       <li>
314        <a href="/contact">
315         Contact
316        </a>
317        — Contact on VisibleData. VisibleData manages 5 data types including dashboards.
318       </li>
319       <li>
320        <a href="/about">
321         About
322        </a>
323        — About on VisibleData. VisibleData manages 5 data types including dashboards.
324       </li>
325       <li>
326        <a href="/privacy">
327         Privacy
328        </a>
329        — Privacy on VisibleData. VisibleData manages 5 data types including dashboards.
330       </li>
331       <li>
332        <a href="/terms">
333         Terms
334        </a>
335        — Terms on VisibleData. VisibleData manages 5 data types including dashboards.
336       </li>
337       <li>
338        <a href="/builder">
339         Dashboard Builder
340        </a>
341        — Dashboard Builder on VisibleData. VisibleData manages 5 data types including dashboards.
342       </li>
343       <li>
344        <a href="/templates">
345         Templates
346        </a>
347        — Templates on VisibleData. VisibleData manages 5 data types including dashboards.
348       </li>
349       <li>
350        <a href="/compare">
351         Data Compare
352        </a>
353        — Data Compare on VisibleData. VisibleData manages 5 data types including dashboards.
354       </li>
355       <li>
356        <a href="/alerts">
357         Alerts
358        </a>
359        — Alerts on VisibleData. VisibleData manages 5 data types including dashboards.
360       </li>
361       <li>
362        <a href="/login">
363         Login
364        </a>
365        — Login on VisibleData. VisibleData manages 5 data types including dashboards.
366       </li>
367       <li>
368        <a href="/register">
369         Register
370        </a>
371        — Register on VisibleData. VisibleData manages 5 data types including dashboards.
372       </li>
373       <li>
374        <a href="/forgot-password">
375         Forgot Password
376        </a>
377        — Forgot Password on VisibleData. VisibleData manages 5 data types including dashboards.
378       </li>
379       <li>
380        <a href="/reset-password">
381         Reset Password
382        </a>
383        — Reset Password on VisibleData. VisibleData manages 5 data types including dashboards.
384       </li>
385      </ul>
386     </nav>
387    </main>
388   </div>
389  </div>
390 </body>
391</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.