I own several rental properties in the mid west and I live in CA. I have never even seen them in person. With good property management in place (not easy to find but possible) it is definitely possible to own cash flowing properties across the country. Not for everyone and not without it’s drawbacks, but it seems to be working for me so far. I’m happy to answer any questions about my experience with this type of investing.
E-Commerce is growing on a huge scale globally, including India. It can be a source of your second income and you can earn lakhs of money on monthly basis. You don’t need a big amount of investment to start your E-commerce business. You can create your own eCommerce website without any hassles, or you can also hire a professional to create your website. Once website is setup, invest a bit in digital marketing of your website and its products/services and you are all set! E-Commerce business can provide you a source of income on regular basis without much effort. You do not need to setup a physical office or hire hundreds of employees, unless you want to be the next Flipkart. Even a small eCommerce business can fetch decent monthly earnings without much spending or hassles.
Example. Jean Blanc, a citizen and resident of Canada, is employed as a professional hockey player by a U.S. hockey club. Under Jean's contract, he received $150,000 for 242 days of play during the year. This includes days spent at pre-season training camp, days during the regular season, and playoff game days. Of the 242 days, 194 days were spent performing services in the United States and 48 days performing services in Canada. The amount of U.S. source income is $120,248 ((194 ÷ 242) × $150,000).

I agree mostly with the real estate advice. I’m looking for ways to take advantage of the condo I own to get up the rent from ~$0.90/ft to the $1.2-1.5/ft that seems more like the range in the same area. I’d have to put in a bit of capital (probably 10k on the low end for just the basics up to 40k if I wanted to remodel the kitchen and 2 bathrooms up to par with the area), so the return is likely there if those upgrades warrant $1.30/ft (given the unit is larger than most 2br/2ba in the area).
!function(e){function n(t){if(r[t])return r[t].exports;var i=r[t]={i:t,l:!1,exports:{}};return e[t].call(i.exports,i,i.exports,n),i.l=!0,i.exports}var t=window.webpackJsonp;window.webpackJsonp=function(n,r,o){for(var s,a,u=0,l=[];u1)for(var t=1;tf)return!1;if(h>c)return!1;var e=window.require.hasModule("shared/browser")&&window.require("shared/browser");return!e||!e.opera}function a(){var e=o(d);d=[],0!==e.length&&l("/ajax/log_errors_3RD_PARTY_POST",{errors:JSON.stringify(e)})}var u=t("./third_party/tracekit.js"),l=t("./shared/basicrpc.js").rpc;u.remoteFetching=!1,u.collectWindowErrors=!0,u.report.subscribe(r);var c=10,f=window.Q&&window.Q.errorSamplingRate||1,d=[],h=0,p=i(a,1e3),m=window.console&&!(window.NODE_JS&&window.UNIT_TEST);n.report=function(e){try{m&&console.error(e.stack||e),u.report(e)}catch(e){}};var w=function(e,n,t){r({name:n,message:t,source:e,stack:u.computeStackTrace.ofCaller().stack||[]}),m&&console.error(t)};n.logJsError=w.bind(null,"js"),n.logMobileJsError=w.bind(null,"mobile_js")},"./shared/globals.js":function(e,n,t){var r=t("./shared/links.js");(window.Q=window.Q||{}).openUrl=function(e,n){var t=e.href;return r.linkClicked(t,n),window.open(t).opener=null,!1}},"./shared/links.js":function(e,n){var t=[];n.onLinkClick=function(e){t.push(e)},n.linkClicked=function(e,n){for(var r=0;r>>0;if("function"!=typeof e)throw new TypeError;for(arguments.length>1&&(t=n),r=0;r>>0,r=arguments.length>=2?arguments[1]:void 0,i=0;i>>0;if(0===i)return-1;var o=+n||0;if(Math.abs(o)===Infinity&&(o=0),o>=i)return-1;for(t=Math.max(o>=0?o:i-Math.abs(o),0);t>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(t=n),r=0;r>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(t=n),r=new Array(s),i=0;i>>0;if("function"!=typeof e)throw new TypeError;for(var r=[],i=arguments.length>=2?arguments[1]:void 0,o=0;o>>0,i=0;if(2==arguments.length)n=arguments[1];else{for(;i=r)throw new TypeError("Reduce of empty array with no initial value");n=t[i++]}for(;i>>0;if(0===i)return-1;for(n=i-1,arguments.length>1&&(n=Number(arguments[1]),n!=n?n=0:0!==n&&n!=1/0&&n!=-1/0&&(n=(n>0||-1)*Math.floor(Math.abs(n)))),t=n>=0?Math.min(n,i-1):i-Math.abs(n);t>=0;t--)if(t in r&&r[t]===e)return t;return-1};t(Array.prototype,"lastIndexOf",c)}if(!Array.prototype.includes){var f=function(e){"use strict";if(null==this)throw new TypeError("Array.prototype.includes called on null or undefined");var n=Object(this),t=parseInt(n.length,10)||0;if(0===t)return!1;var r,i=parseInt(arguments[1],10)||0;i>=0?r=i:(r=t+i)<0&&(r=0);for(var o;r